{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# How to generate long-short trading signals with a Random Forest"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Imports & Settings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T15:47:42.562715Z",
     "start_time": "2020-06-22T15:47:42.559121Z"
    }
   },
   "outputs": [],
   "source": [
    "import warnings\n",
    "warnings.filterwarnings('ignore')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T15:47:43.578631Z",
     "start_time": "2020-06-22T15:47:42.880318Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "from time import time\n",
    "from io import StringIO\n",
    "import sys, os\n",
    "\n",
    "from itertools import product\n",
    "from pathlib import Path\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import statsmodels.api as sm\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "import lightgbm as lgb\n",
    "\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from scipy.stats import spearmanr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T15:47:43.817684Z",
     "start_time": "2020-06-22T15:47:43.814639Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "sys.path.insert(1, os.path.join(sys.path[0], '..'))\n",
    "from utils import MultipleTimeSeriesCV, format_time"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T15:47:44.042164Z",
     "start_time": "2020-06-22T15:47:44.040062Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "sns.set_style('whitegrid')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T15:47:44.267297Z",
     "start_time": "2020-06-22T15:47:44.265163Z"
    }
   },
   "outputs": [],
   "source": [
    "np.random.seed(42)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T15:47:44.522514Z",
     "start_time": "2020-06-22T15:47:44.520038Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "YEAR = 252\n",
    "idx = pd.IndexSlice"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T15:47:45.607007Z",
     "start_time": "2020-06-22T15:47:45.605041Z"
    }
   },
   "outputs": [],
   "source": [
    "DATA_DIR = Path('..', 'data')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T15:47:45.925418Z",
     "start_time": "2020-06-22T15:47:45.921236Z"
    }
   },
   "outputs": [],
   "source": [
    "results_path = Path('results', 'return_predictions')\n",
    "if not results_path.exists():\n",
    "    results_path.mkdir(parents=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Get Data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "See the notebook [japanese_equity_features](03_japanese_equity_features.ipynb) in this directory for data preparation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:02:51.329289Z",
     "start_time": "2020-06-20T04:02:50.750506Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "MultiIndex: 2304509 entries, ('1332.JP', Timestamp('2010-01-04 00:00:00')) to ('9990.JP', Timestamp('2019-12-30 00:00:00'))\n",
      "Data columns (total 23 columns):\n",
      " #   Column           Non-Null Count    Dtype  \n",
      "---  ------           --------------    -----  \n",
      " 0   ret_1            2303568 non-null  float64\n",
      " 1   ret_rel_perc_1   2303568 non-null  float64\n",
      " 2   ret_5            2299804 non-null  float64\n",
      " 3   ret_rel_perc_5   2299804 non-null  float64\n",
      " 4   ret_10           2295099 non-null  float64\n",
      " 5   ret_rel_perc_10  2295099 non-null  float64\n",
      " 6   ret_21           2284748 non-null  float64\n",
      " 7   ret_rel_perc_21  2284748 non-null  float64\n",
      " 8   ret_63           2245226 non-null  float64\n",
      " 9   ret_rel_perc_63  2245226 non-null  float64\n",
      " 10  PPO              2280984 non-null  float64\n",
      " 11  NATR             2291335 non-null  float64\n",
      " 12  RSI              2291335 non-null  float64\n",
      " 13  bbl              2300745 non-null  float64\n",
      " 14  bbu              2300745 non-null  float64\n",
      " 15  weekday          2304509 non-null  int64  \n",
      " 16  month            2304509 non-null  int64  \n",
      " 17  year             2304509 non-null  int64  \n",
      " 18  fwd_ret_01       2303568 non-null  float64\n",
      " 19  fwd_ret_05       2299804 non-null  float64\n",
      " 20  fwd_ret_10       2295099 non-null  float64\n",
      " 21  fwd_ret_21       2284748 non-null  float64\n",
      " 22  fwd_ret_63       2245226 non-null  float64\n",
      "dtypes: float64(20), int64(3)\n",
      "memory usage: 413.3+ MB\n"
     ]
    }
   ],
   "source": [
    "data = pd.read_hdf('data.h5', 'stooq/japan/equities')\n",
    "data.info(null_counts=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We start with 941 tickers."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:02:51.345476Z",
     "start_time": "2020-06-20T04:02:51.330230Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "941"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(data.index.unique('ticker'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Select universe of 250 most-liquid stocks"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We rank the stocks by their daily average dollar volume and select those with the 250 lowest average ranks and thus highest average volumes for the 2010-2017 period."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:03:01.007749Z",
     "start_time": "2020-06-20T04:02:51.346235Z"
    }
   },
   "outputs": [],
   "source": [
    "prices = (pd.read_hdf(DATA_DIR / 'assets.h5', 'stooq/jp/tse/stocks/prices')\n",
    "          .loc[idx[:, '2010': '2017'], :])\n",
    "\n",
    "dollar_vol = prices.close.mul(prices.volume).loc[idx[:, :'2017'],:]\n",
    "dollar_vol_rank = dollar_vol.groupby(level='date').rank(ascending=False)\n",
    "universe = dollar_vol_rank.groupby(level='ticker').mean().nsmallest(250).index"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## MultipleTimeSeriesCV"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "See [Chapter 7 - Linear Models](../07_linear_models) for details."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:03:01.015288Z",
     "start_time": "2020-06-20T04:03:01.011127Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "cv = MultipleTimeSeriesCV(n_splits=36,\n",
    "                          test_period_length=21,\n",
    "                          lookahead=5,\n",
    "                          train_period_length=2 * 252)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For each fold, the train and test periods are separated by a `lookahead` number of periods and thus do not overlap:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:03:04.577089Z",
     "start_time": "2020-06-20T04:03:01.019404Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training: 2017-10-24-2019-11-25  (508 days) | Test: 2019-12-02-2019-12-30 (21 days)\n",
      "Training: 2017-09-22-2019-10-24  (508 days) | Test: 2019-10-31-2019-11-29 (21 days)\n",
      "Training: 2017-08-23-2019-09-20  (508 days) | Test: 2019-09-30-2019-10-30 (21 days)\n",
      "Training: 2017-07-24-2019-08-21  (508 days) | Test: 2019-08-28-2019-09-27 (21 days)\n"
     ]
    }
   ],
   "source": [
    "for i, (train_idx, test_idx) in enumerate(cv.split(X=data)):\n",
    "    train = data.iloc[train_idx]\n",
    "    train_dates = train.index.get_level_values('date')\n",
    "    test = data.iloc[test_idx]\n",
    "    test_dates = test.index.get_level_values('date')\n",
    "    df = train.reset_index().append(test.reset_index())\n",
    "    n = len(df)\n",
    "    assert n== len(df.drop_duplicates())\n",
    "    msg = f'Training: {train_dates.min().date()}-{train_dates.max().date()} '\n",
    "    msg += f' ({train.groupby(level=\"ticker\").size().value_counts().index[0]:,.0f} days) | '\n",
    "    msg += f'Test: {test_dates.min().date()}-{test_dates.max().date()} '\n",
    "    msg += f'({test.groupby(level=\"ticker\").size().value_counts().index[0]:,.0f} days)'\n",
    "    print(msg)\n",
    "    if i == 3:\n",
    "        break"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Model Selection: Time Period and Horizon"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For the model selection step, we restrict training and validation sets to the 2010-2017 period."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:03:05.689053Z",
     "start_time": "2020-06-20T04:03:04.578955Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "cv_data = data.loc[idx[universe, :'2017'], :]\n",
    "tickers = cv_data.index.unique('ticker')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Persist the data to save some time when running another experiment:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:03:05.745915Z",
     "start_time": "2020-06-20T04:03:05.689945Z"
    }
   },
   "outputs": [],
   "source": [
    "cv_data.to_hdf('data.h5', 'stooq/japan/equities/cv_data')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:03:05.761698Z",
     "start_time": "2020-06-20T04:03:05.746804Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.io.pytables.HDFStore'>\n",
      "File path: data.h5\n",
      "/stooq/japan/equities                    frame        (shape->[2304509,23])\n",
      "/stooq/japan/equities/cv_data            frame        (shape->[418119,23]) \n",
      "/us/equities/monthly                     frame        (shape->[56756,27])  \n",
      "/us/equities/prices                      frame        (shape->[9532628,16])\n"
     ]
    }
   ],
   "source": [
    "with pd.HDFStore('data.h5') as store:\n",
    "    print(store.info())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We're picking prediction horizons of 1, 5, 10 and 21 days:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T15:49:03.520326Z",
     "start_time": "2020-06-22T15:49:03.518345Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "lookaheads = [1, 5, 10, 21]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Baseline: Linear Regression"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Since it's quick to run and quite informative, we generate linear regression baseline predictions. See [Chapter 7 - Linear Models](../07_linear_models) for details."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:03:05.783701Z",
     "start_time": "2020-06-20T04:03:05.771348Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "lr = LinearRegression()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:03:05.796815Z",
     "start_time": "2020-06-20T04:03:05.784890Z"
    }
   },
   "outputs": [],
   "source": [
    "labels = sorted(cv_data.filter(like='fwd').columns)\n",
    "features = cv_data.columns.difference(labels).tolist()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### CV Parameters"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We set five different training lengths from 3 months to 5 years, and two test periods as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:03:05.804923Z",
     "start_time": "2020-06-20T04:03:05.798039Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "train_lengths = [5 * YEAR, 3 * YEAR, YEAR, 126, 63]\n",
    "test_lengths = [5, 21]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Since linear regression has no hyperparameters, our CV parameters are the cartesian product of prediction horizon and train/test period lengths:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:03:05.812977Z",
     "start_time": "2020-06-20T04:03:05.806249Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "test_params = list(product(lookaheads, train_lengths, test_lengths))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we iterate over these parameters and train/validate the linear regression model while capturing the information coefficient of the model predictions, measure both on a daily basis and for each complete fold:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:53.835412Z",
     "start_time": "2020-06-20T04:03:05.814296Z"
    },
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "lr_metrics = []\n",
    "for lookahead, train_length, test_length in test_params:\n",
    "    label = f'fwd_ret_{lookahead:02}'\n",
    "    df = cv_data.loc[:, features + [label]].dropna()\n",
    "    X, y = df.drop(label, axis=1), df[label]\n",
    "\n",
    "    n_splits = int(2 * YEAR / test_length)\n",
    "    cv = MultipleTimeSeriesCV(n_splits=n_splits,\n",
    "                              test_period_length=test_length,\n",
    "                              lookahead=lookahead,\n",
    "                              train_period_length=train_length)\n",
    "\n",
    "    ic, preds = [], []\n",
    "    for i, (train_idx, test_idx) in enumerate(cv.split(X=X)):\n",
    "        X_train, y_train = X.iloc[train_idx], y.iloc[train_idx]\n",
    "        X_test, y_test = X.iloc[test_idx], y.iloc[test_idx]\n",
    "        lr.fit(X_train, y_train)\n",
    "        y_pred = lr.predict(X_test)\n",
    "        preds.append(y_test.to_frame('y_true').assign(y_pred=y_pred))\n",
    "        ic.append(spearmanr(y_test, y_pred)[0])\n",
    "    preds = pd.concat(preds)\n",
    "    lr_metrics.append([\n",
    "        lookahead, train_length, test_length,\n",
    "        np.mean(ic),\n",
    "        spearmanr(preds.y_true, preds.y_pred)[0]\n",
    "    ])\n",
    "\n",
    "columns = ['lookahead', 'train_length', 'test_length', 'ic_by_day', 'ic']\n",
    "lr_metrics = pd.DataFrame(lr_metrics, columns=columns)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:53.841483Z",
     "start_time": "2020-06-20T04:04:53.836314Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 40 entries, 0 to 39\n",
      "Data columns (total 5 columns):\n",
      " #   Column        Non-Null Count  Dtype  \n",
      "---  ------        --------------  -----  \n",
      " 0   lookahead     40 non-null     int64  \n",
      " 1   train_length  40 non-null     int64  \n",
      " 2   test_length   40 non-null     int64  \n",
      " 3   ic_by_day     40 non-null     float64\n",
      " 4   ic            40 non-null     float64\n",
      "dtypes: float64(2), int64(3)\n",
      "memory usage: 1.7 KB\n"
     ]
    }
   ],
   "source": [
    "lr_metrics.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Information Coefficient distribution by Lookahead"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Convert the data to long `seaborn`-friendly format:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:53.893059Z",
     "start_time": "2020-06-20T04:04:53.842363Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 80 entries, 0 to 39\n",
      "Data columns (total 5 columns):\n",
      " #   Column        Non-Null Count  Dtype  \n",
      "---  ------        --------------  -----  \n",
      " 0   Lookahead     80 non-null     int64  \n",
      " 1   Train Length  80 non-null     int64  \n",
      " 2   Test Length   80 non-null     int64  \n",
      " 3   IC            80 non-null     float64\n",
      " 4   Measure       80 non-null     object \n",
      "dtypes: float64(1), int64(3), object(1)\n",
      "memory usage: 3.8+ KB\n"
     ]
    }
   ],
   "source": [
    "lr_metrics_long = pd.concat([(lr_metrics.drop('ic', axis=1)\n",
    "                              .rename(columns={'ic_by_day': 'ic'})\n",
    "                              .assign(Measured='By Day')),\n",
    "                             lr_metrics.drop('ic_by_day', axis=1)\n",
    "                             .assign(Measured='Overall')])\n",
    "lr_metrics_long.columns=['Lookahead', 'Train Length', 'Test Length', 'IC', 'Measure']\n",
    "lr_metrics_long.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Plot both IC measures for the various CV parameters:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:55.277895Z",
     "start_time": "2020-06-20T04:04:53.899522Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABdgAAALICAYAAABsPpIdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdbZxU9X03/s/CsqthETQSlCoGSSnUmxDQK2m5IE2DXlEv0qAigqw1Un01qV71NhBvCVHEqmiTKm1jNAoJQcWkahKTmLZiaGwCKRUN2ritgo0aKJAAwsKy5/+Av0s2Ki7H3WFZ3u8nMufMmd93fnvmO8fPnDlTVRRFEQAAAAAAYLd029MFAAAAAADA3kjADgAAAAAAJQjYAQAAAACgBAE7AAAAAACUIGAHAAAAAIASBOwAAAAAAFCCgJ3d9q//+q/5vd/7vXz7299utXzs2LGZNm3aHqqqnPr6+px++ukt/7311lvbtN2DDz6YP/qjP0p9fX3OOuusTJ48OT/60Y/ecS2/bdq0aVm0aNE7etyRI0e26X4PPvhgbr755nc01m+aP39+vvjFL5befubMmZk/f3671QN7A/1Vf22Lsv31mWeeyahRo1JfX5/6+vo37GfQFemr+mpbtPdx63333ZdTTz01Z5xxRv7pn/6pPUqETkd/1V/bomx/XbFiRSZNmpT6+vpMmTIla9asaVm3du3anHjiiWlsbGy3OuGdqt7TBbB3OvLII/PII4/k5JNPTpI899xz2bx58x6uqpwbb7wxgwYNSlEUmTRpUpYvX55jjjnmbbf7v//3/+ayyy5LkqxZsyZnnXVW5s2bl759+3Z0yV3a2rVr85nPfCYvvPBCpkyZsqfLgYrTX/XXjvKzn/0sn/zkJ3Puuefu6VKgovRVfbWjvNlx6+rVqzN37twsXLgwjY2NmTRpUkaOHJmampo9XC20P/1Vf+0o119/fa6++uoMHTo0X//61/OlL30pn/3sZ/PEE0/klltuaRW4Q2cgYKeUIUOG5IUXXsivf/3rHHDAAXnooYcyduzYvPzyy0mS73znO/nKV76Sbt26ZcSIEbnsssvyyiuvZPr06WlsbMz69evzF3/xFxkzZkxuvfXWPPnkk2lubs4pp5ySc845J/X19Zk+fXoGDRqU+fPnZ82aNRk3blw+9alPpU+fPhk9enRGjx6d6667LknSp0+fzJw5M7169Wqpcd68efnud7/bqu4bb7wx/fv3f9PntHXr1jQ1NeU973lPZs+enX79+uWss87Kr371q3zyk5/Mgw8++JbzcfDBB+f//J//k3/+53/OSSedlCuvvDIbNmzIunXrMn78+IwdOzbjxo3Ld7/73XTv3j033XRTjj766Jx00kml5n/WrFlZunRpkh1v6H/6p3+al156KVdeeWWamppSVVWVq666KkOGDGnZZvbs2dmwYUOuueaafPWrX833vve9NDU1pVevXi2fKP/7v/97zj333KxduzYTJ07MhAkT8uMf/zi33nprunfvnsMPPzwzZsxIY2PjG57jpEmTsmTJksycOTO9e/dOt27dMmzYsFZ1P/roo/nqV7/aatnll1+eY489tuX2pk2bcuGFF77jT+hhb6W/tqa/tl9/ffrpp/Nf//Vf+cEPfpAjjjgiV1xxRerq6krNE+xN9NXW9NWOPW596qmn8oEPfCA1NTWpqanJgAED8uyzz7baDroK/bU1/bX9+uvs2bPznve8J0myffv21NbWJkm6deuWu+++O6eddlqpOYOOImCntBNOOCHf//73c+qpp+app57Keeedl5dffjnr16/PF7/4xSxcuDD7779/Lr/88ixevDhVVVX55Cc/mQ9+8IP56U9/mi9+8YsZM2ZMvvnNb2bevHnp16/fLt+skh1nhCxcuDA1NTU544wzMnPmzLzvfe/L/fffnzvvvDMXX3xxy30nT56cyZMnv+3zmDp1avbff/+sWrUqQ4YMyYEHHpjx48fnkksuyVlnnZVHHnkkY8eOfdvHefe7351169blxRdfzCmnnJITTzwxr776aurr6zNp0qSMGDEiP/zhD/O///f/zqJFi/KXf/mXbz/Jb+Kf/umf8tJLL+W+++5LU1NTJk2alA996EO5/fbbU19fnzFjxmTFihW54oorWubzxhtvTFVVVa699to0Nzdn/fr1LQc6U6ZMyfLly5Mk1dXV+fKXv5z//u//zvnnn58zzjgjV199db72ta/l3e9+d2677bZ84xvfyFFHHfWmz/GGG27ILbfckoEDB+baa699Q+0f+9jH8rGPfWyXz+/www/P4YcfLmBnn6a/tqa/tk9/PfbYYzN+/PgcffTRmTNnTm6//fZMnTq11FzB3kZfbU1f7bjj1o0b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3nDfwYMH59/+7d8ydOjQLFu2rGV5VVVViqJ4y+3aQsAOAAAAAECHOPPMM3PVVVdl8uTJ2bhxYyZNmpSampr07t07f/Inf5LevXtn5MiR6d+/f44++uj81V/9VQYNGpQPfehDLY+xfv36nHrqqS23zz333EydOjXTp09PY2NjtmzZkiuvvPItazjvvPPymc98Jt/5znfynve8J9XVO2Lx97///bn55ptbzlwvo6p4PaIHAAAAAIAu5vHHH8+BBx6YY489Nv/yL/+Sv/3bv829997bLo/tDHYAAAAAALqsww47LFdccUW6d++e5ubmXZ7tvru6tdsjsc/413/91/ze7/1evv3tb7daPnbs2EybNm0PVVVOURT56le/mokTJ6a+vj719fV5/PHHO2SsadOmZdGiRXnwwQdz8803t1r30ksvvencjRw58h2N+WZjvZX6+vo0NDS8o/F+0xlnnJGXXnqp1LZr167NiSeemMbGxnarB/YG+ms5+mvbXHfddTn11FNb/h4bNmxot5qgs9JXy9FX2+63j1u3bNmSCy+8MJMmTcp5552XtWvXtlud0Jnor+Xor23zla98JePHj8/48ePzN3/zN63Wff/738+ll17aXiWyDxk0aFAWLFiQr33ta/n617+eY445pt0e2xnslHLkkUfmkUceycknn5wkee6559r8y7qdyYIFC/LTn/40X/nKV1JbW5t169bl/PPPT+/evTNs2LA9Xd4+6Yknnsgtt9ySNWvW7OlSYI/QX+kozzzzTO68884cdNBBe7oUqCh9lY7yZset8+fPz+DBg3PhhRfmW9/6Vu64445cddVVe7BK6Dj6Kx1h1apVeeihh3L//fenqqoqkyZNypgxYzJkyJBcd911+eEPf5ihQ4fu6TKhFQE7pQwZMiQvvPBCfv3rX+eAAw7IQw89lLFjx+bll19OknznO9/JV77ylXTr1i0jRozIZZddlldeeaXlhwfWr1+fv/iLv8iYMWNy66235sknn0xzc3NOOeWUnHPOOamvr8/06dMzaNCgzJ8/P2vWrMm4cePyqU99Kn369Mno0aMzevToXHfddUmSPn36ZObMmenVq1dLjfPmzct3v/vdVnXfeOON6d+/f6v73HvvvamtrU2SHHjggbngggsyf/78PPXUU/n1r3+dCy64IFu3bs3HP/7xPPTQQ1mwYEEeeeSR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b745EyZMyMknn5xHH310ix/esvfee+d973tfLr300nR1dWXBggUZNWpUPvGJT2TRokVpbGzMhRdemKIoMmbMmNx6663p6urK66+/nt/85jcbPd/ll1/eY+sAA5l8la89na/PPvtsPv/5z+fee+9NV1dXfvrTn+a44457cwsG/YhclavV+r114sSJefDBB7Pffvtl8eLFmTRpUqnngf5CvsrXns7Xoijy6U9/Ou973/u6/0DDwNFQX5tJM27tsedrvnLaGz7m2GOP7b501KhRozJv3rweG38dBTtvypFHHpkf/vCHGTNmTPcP0p122qn7emlr1qzJHnvskY9+9KM54ogjcvnll+cb3/hGRo4cmT//+c8ZOnRodtxxxxxzzDHZcccdc+CBB2b33XfPtGnTMmfOnIwcOTJvectbNjn27Nmzc+GFF2bNmjVJyv0SvG6Op5xySurq6lJTU5NPf/rTmThxYpLkH/7hH3LxxRfnnHPOSbL2GnMHHHBAmpqa0t7env3226/7h/w6BxxwQKZPn57m5uZsv/322WuvvfLCCy9s89yS5OWXX87HP/7x7u/POOOMfPGLX8zFF1+cm2++OZ2dnbn88suz00475bzzzsu0adMyZMiQjB49OhdccEF+/OMfJ0n22WeffOxjH8u8efNy1FFHZfbs2bnvvvsyYsSI1NbWbvav6Yceemgee+yxnHzyyVm9enU+8pGPpLGxMcccc0xOPPHE7LDDDtlll13ywgsvZPz48TniiCNywgkn5C1veUt23nnnUq8ZWEu+yteezNexY8fm6KOPzoknnpj6+vocc8wxefvb315q7aC/kqtytRq/tzY1NeXCCy9MU1NT6uvrc9VVV/XYc0NfJV/la0/m66JFi/LYY4+lvb09Dz30UJJk+vTp2X///UusHoNdW1tbkmThwoUVHaem6Mk/oQGl/P73v891112X+fPn9/ZUAAYU+QrQs+QqQGXIVwaLau5g//nPf54vfvGL2WOPPdLZ2Znp06dnwoQJPTb+OnawAwAAAAAwoGy33XY588wzM2XKlDz77LM566yzcv/996eurmcrcTvYAQAAAACouGruYG9vb09XV1e22267JMkJJ5yQa6+9NiNHjuyxOSTJkDd+CAAAAAAA9B93331392WXVqxYkZaWluy66649Po4d7AAAAAAAVFRbx5o01NdW7fna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AJSgYAcAAAAAgBIU7AAAAAAAUIKCHQAAAAAASlCwAwAAAABACXW9PYGB4hvf+EYeeOCBdHR0pKmpKfvvv38uvvjiFEWRd77znbn44otTW1vb29OsmJ///Of56le/moULF2b58uW59NJLU1tbm6FDh+aKK67ILrvskgcffDDXX399kuTv/u7vcskll6SmpqaXZ95zOjo68uUvfzl/+MMf0t7ennPOOSdvfetbc/bZZ+dtb3tbkqSpqSlHHnlkvvvd7+bHP/5xkuTggw/Oueee24sz73k/+MEPcu+99yZJ2trasnz58tx+++2bXIuBfF6UfV+0tbVlxowZWblyZYYNG5YrrrgiO+20Uy+/mt4z2PM1kbGJjP1LMla+9hT5Kl8T+fqX5Kt87UmDPWPlq3z9S/J1LRk7gBW8aY8++mjxL//yL8WaNWuKlpaW4pprrinOOeec4rHHHiuKoiguvPDC4ic/+Ukvz7JybrrppuKf/umfiilTphRFURSnnHJK8ctf/rIoiqK47bbbirlz5xavvvpqcdRRRxUrV67sPmbd1wPF3XffXVx22WVFURTFqlWrioMPPri48847i29/+9sbPO75558vjjvuuKKzs7NYs2ZNMXXq1GL58uW9MeWqmD17dnH77bdvci0G8nnxZt4XN998c3HNNdcURVEU//Zv/1ZceumlvfMi+oDBnq9FIWPXkbGbNhgzVr72DPkqX9eRr5smX+XrmzHYM1a+riVfN20w5mtRyNiBziViesB///d/Z9y4cfnMZz6Ts88+Ox/60Idy7bXX5r3vfW/a29vz4osvZuedd+7taVbM6NGjc+2113Z/f/XVV2f8+PFJkjVr1qShoSE/+9nPMm7cuFxxxRU5+eSTs8suuwy4v7YdccQR+exnP9v9fW1tbZ544on813/9V0455ZR8+ctfTktLS9761rfmW9/6VmprazNkyJB0dnamoaGhF2deOcuWLctvfvObTJ06dZNrMZDPizfzvmhubs7kyZOTJAcddFAeeeSRXnkNfcFgz9dExq4jYzc2WDNWvvYM+Spf15GvG5Ova8nX8gZ7xsrXteTrxgZrviYydsDr7YZ/ILjooouK008/vWhrayuefvrp4vDDDy+6urqK3//+98Vhhx1WHHfcccWqVat6e5oV9bvf/a77r3DrNDc3F0cccUSxcuXK4oc//GHxgQ98oHjhhReKlpaW4phjjimeeeaZXpptZb366qvFqaeeWvzoRz8q7r777mLZsmVFURTFggULivnz53c/rqurq5g/f35x8cUX99ZUK+4zn/lM8cgjjxRFUWxyLQb6eVH2ffHP//zPxW9+85uiKIpizZo1xeTJk3tj+n2CfF1Lxq4nY9cbzBkrX988+bqWfF1Pvq4nX+XrmyVj5etfkq/rDeZ8LQoZO5DZwd4DRowYkQ9+8IMZOnRo9t577zQ0NGTVqlXZY4898pOf/CRNTU2ZP39+b0+zqv793/89l1xySW666abstNNOGTFiRPbdd9/suuuuGTZsWN7znvdk+fLlvT3NHvfHP/4x06ZNyzHHHJOjjz46hx12WN797ncnSQ477LD88pe/TLL2mmMXXHBBWltbc8kll/TmlCvmlVdeyTPPPJP3v//9SbLJtRgs58U6W/u+aGxsTGtra5KktbU1O+ywQy/PvPfI102TsTJWxm5Ivm47+bpp8lW+ytcNyddyZOzG5Kt8la8bk7EDh4K9B0yaNCkPPfRQiqLIihUr8tprr+Wiiy7Ks88+myQZNmxYhgwZPEv9wx/+MN/73veycOHC7LnnnkmSd7/73fnVr36VVatWpbOzMz//+c+zzz779PJMe9ZLL72UM844IzNmzMgJJ5yQJDnzzDPzi1/8IknyyCOP5F3veleKosinP/3pvOMd78icOXMG7AfbPP744/nABz7Q/f2m1mIwnBfrbMv7YuLEiXnwwQeTJIsXL86kSZN6c+q9Sr5uTMbK2ETG/iX5Wo583Zh8la+JfP1L8rU8Gbsh+SpfE/n612TswFLX2xMYCA455JA8/vjjOeGEE1IURWbNmpVhw4Zl5syZqa+vz/bbb5/LLrust6dZFWvWrMnll1+ekSNH5rzzzkuSvPe9783555+fL3zhC/nkJz+ZZO21yMaNG9ebU+1xN954Y1555ZUsWLAgCxYsSJLMnDkzc+fOTX19fXbZZZdceumlWbRoUR577LG0t7fnoYceSpJMnz49+++/f29Ov8f99re/zahRo7q/nz17di699NIN1qKxsXHAnxfJtr8v9txzz1x44YVpampKfX19rrrqqt6cfq+SrxuSsTJ2HRm7lnwtT75uSL7K13Xk61ry9c2RsevJV/m6jnxdT8YOPDVFURS9PQkAAAAAAOhvBs+/SQIAAAAAgB6kYAcAAAAAgBIU7AAAAAAAUIKCHQAAAAAASlCwAwAAAABACQp2Bq358+fntNNOyxFHHJEPfehDOe2003L++edv1bE33XRTfvGLX2zVYw899NC0tbW9malu0lNPPZXHH3+8omMAlCVjASpDvgJUhnwFyqrr7QlAb5k5c2aS5Ac/+EGeeeaZXHDBBVt97Kc+9alKTWur/eQnP8kuu+yS9773vb09FYCNyFiAypCvAJUhX4GyFOzwV2bOnJmXX345L7/8cm644YZ89atfzZ/+9Kf8+c9/zkEHHZTPfe5zmTlzZo488si89NJLefDBB/P666/n+eefz1lnnZWPf/zjbzjGq6++mosuuih//vOfkyRf+cpX8o53vCOHH354Jk6cmN/+9rfZeeedc+2116ajoyNf/OIX88ILL2TkyJF5/PHHc8899+Tee+9NfX193vWudyVJZs+end///vdJkuuuuy477rhj5RYJoCQZC1AZ8hWgMuQr8EZcIgY24f3vf39uv/32tLa2ZsKECfn2t7+d2267LbfddttGj21pack3vvGN3HDDDbnpppu26vlvvPHGvP/978/ChQtz6aWXZvbs2UmS3/3ud/nsZz+bO+64I6tWrcqyZctyxx13ZNSoUbn99ttz7rnnZuXKldltt91y3HHH5ROf+ET222+/JMnxxx+fhQsXZo899sjDDz/cY2sB0NNkLEBlyFeAypCvwJbYwQ6bMGbMmCTJiBEjsmzZsjz66KNpbGxMe3v7Ro995zvfmSQZOXLkJu/flF/96ld59NFH8x//8R9JkldeeSVJ8rd/+7cZOXJk9/O1tbXl6aefzkEHHZQkGTt2bHbaaadNPue73/3uJMkuu+yS119/fWtfKkDVyViAypCvAJUhX4EtUbDDJtTU1CRZe+214cOHZ86cOXnuuedy5513piiKTT52W+y999752Mc+lqOPPjorV67MXXfdtdnnGjduXH72s5/lIx/5SJ5//vnufzJWU1OTrq6uNzUPgN4gYwEqQ74CVIZ8BbZEwQ5bcMABB2T69Olpbm7O9ttvn7322isvvPDCNj9PU1NT99dHH310zj777Fx00UW5884709LSknPPPXezx55wwgmZOXNmTjnllOy+++5paGhIsvav0f/6r/+asWPHbvsLA+gDZCxAZchXgMqQr8Cm1BR//ac2oE/56U9/mtWrV+eDH/xgnn322Xzyk5/MokWLentaAAOCjAWoDPkKUBnyFfoeBTv0cS+++GKmT5+ejo6OdHZ25vzzz+++3hoAb46MBagM+QpQGfIV+h4FOwAAAAAAlDCktycAAAAAAAD9kYIdAAAAAABKULADAAAAAEAJCnYAAAAAAChBwQ4AAAAAACX8P3cuaVq03qbmAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 1499.88x720 with 8 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.catplot(x='Train Length',\n",
    "            y='IC',\n",
    "            hue='Test Length',\n",
    "            col='Lookahead',\n",
    "            row='Measure',\n",
    "            data=lr_metrics_long,\n",
    "            kind='bar')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Compare the distributions of each IC metric for the different prediction horizons:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:55.561447Z",
     "start_time": "2020-06-20T04:04:55.278988Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+gAAAFgCAYAAAAo31N4AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3de1xUdeL/8fcMIIJoBLheMo1AzLaLortbeUlNDHhkasoi+jC+SdZ+NyF185KVqRVqpZtYWtrlS66rptV3TZG8lmvbTb+SXbBEf1KPNlEYLRHl4szvD3NaUxqgmTlnZl7Px6NHMTPnnDdj8pk3n3M+x+JwOBwCAAAAAACGshodAAAAAAAAUNABAAAAADAFCjoAAAAAACZAQQcAAAAAwAQo6AAAAAAAmAAFHQAAAAAAEwg2OgAA8xgwYIAWLlyoa6+9VpK0fft2vfzyy/rhhx9UV1enzp07a+rUqWrXrt0F23bp0kXvv/++oqKimnzskJAQNW/eXA6HQw6HQ6mpqRo3bpyCg/lRBQDwD79mrJWk999/X4sXL1ZZWZmaN2+u6Oho3XffferZs6fHs3/44Yd67LHHtH79ek2bNk2dO3dWVlaWx48LBBI+9QK4qLfeektLlizRkiVL1KlTJzkcDi1dulR33nmnNmzYoGbNmrn9mE8//bTzA0tVVZUeeOABzZkzR4888ojbjwUAgNEaO9Zu3bpVc+fO1ZNPPqnu3btLkoqKijRx4kTNnDlTN998sxHfBgA34hR3ABf117/+VQ899JA6deokSbJYLLrnnnuUnZ2tmpqai27zzDPPaNiwYRoyZIi2b98uSbrrrrv02muvOV+zePFi5ebmujx+eHi4ZsyYodWrV6uyslJVVVWaMmWK0tPTdeutt+qOO+7QwYMH9e9//1uJiYk6ceKEJMnhcOjWW2/Vvn37fu1bAACARzV2rH3yySf18MMPO8u5JHXr1k3Tp0/Xk08+qRMnTigxMVFHjx51Pp+WlqZ3331XNTU1ys3N1bBhw3T77bdr2rRpqqyslHR2Vn/ChAlKSUnR5s2btX37do0cOVJ33HGH+vXrp2eeecbD7wSAcyjoAC5w7Ngxffvtt0pMTDzvcYvFottvv10REREX3a5Dhw5688039dRTT2natGmy2WwaPXq0s6Db7XatXbtWI0eObFCOtm3bKiIiQgcPHtSOHTvUqlUrrV69Wm+//bauueYarVixQu3bt9cNN9ygdevWSZI++OADRUZG6qqrrvoV7wAAAJ7V2LH22LFjOnTokH73u99dsK8bb7xRJSUlstvtSkpKco6JBw4cUHl5ufr06aOlS5cqKChIb7zxhtatW6ff/OY3evrpp5376Ny5szZu3KiBAwfq5Zdf1ty5c/XGG29o9erVWrp0qWw2mwfeBQA/xynuAC5gtZ793Z3dbm/UdhkZGZKkhIQExcXFac+ePerfv7+eeOIJ7du3T2VlZerQoYOuvPLKBu/TYrEoLCxMycnJuvzyy7V8+XKVlpbqo48+cs4gjB49Wk899ZRGjx6t1atXO3MAAGBWTR1r6+rqLnistrZW0tkxMy0tTbNmzVJWVpZef/11DR8+XFarVe+8845OnDihf/3rX85toqOjnfs4dw27xWLR888/r3feeUfr16/XgQMH5HA4dOrUqSZ9nwAahxl0ABe45JJLdMUVV+iTTz654Ln777+/3tPHz33YkM5+4AgODlZQUJDS09O1du1avf766w2ePZekb7/9VlVVVerYsaP+/ve/66GHHlLz5s01ePBg3XbbbXI4HJKkm266SadOndL777+vXbt2KSUlpZHfMQAA3tXYsfbSSy9VbGysPvroowte/8EHHyguLk6tWrVSz549VVdXp71792r9+vUaPny4pLPj8vTp0/WPf/xD//jHP7RmzRotXLjQuY/w8HBJZ9eAGTZsmD7//HNdffXVmjJlioKDg51jLgDPoqADuKjx48friSeeUGlpqSTpzJkzWrx4sfbt21fvDPibb74pSfr888/19ddf6/rrr5d09vq3LVu26PPPP1dSUlKDjv/DDz/oscce0+jRoxUaGqqdO3dq2LBhSktLU2xsrLZt26YzZ85IOvvb/lGjRumhhx7SbbfdptDQ0F/77QMA4HGNHWsffPBB5ebmqqioyPnYnj17NHfuXD3wwAPOx9LS0vTYY4+pS5cuztXge/furRUrVqimpkZ2u12PPPKIFixYcMExSktLVVlZqQkTJmjAgAH68MMPndsA8DxOcQdwUYMHD5bD4dCkSZNUV1en6upq/fa3v1V+fn69K7h/8803Gjp0qCwWixYsWKDIyEhJUnR0tK655hrFxcUpJCSk3mM+8MADat68uYKCgnTmzBkNGjRIf/rTnyRJY8eO1YwZM7R27VpJZxfF+eqrr5zbDhs2TPPmzVN6erq73gIAADyqsWPtzTffrHnz5mnhwoUqKyuT3W5X27ZtNW/ePN1www3O1w0dOlQLFiw4r4D/+c9/1rx58zRs2DCdOXNGXbt21bRp0y44RpcuXdSvXz+lpKSoWbNmSkhIUHx8vEpLSz1yBxcA57M4OF8FgIfZbDaNGDFCK1asqPe+rr/Whg0b9Oabb+rFF1/0yP4BAAAAT2MGHYBHvfbaa1qwYIGys7M9Vs7HjBkjm82mxYsXe2T/AAAAgDcwgw4AAAAAgAmwSBwAAAAAACZAQQcAAAAAwAT8sqDv37/f6AgAAPg9xlsAANzLLwt6XV2d0REAAPB7jLcAALiXXxZ0AAAAAAB8DQUdAAAAAAAToKADAAAAAGACFHQAAAAAAEyAgg4AAAAAgAlQ0AEAAAAAMAEKOgAAAAAAJkBBBwAAAADABCjoAAAAAACYAAUdAAAAAAAToKADAAAAAGACwUYHAAAjFBYWqqCgwCP7ttlskqSoqCiP7F+SUlNTlZyc7LH9AwAAwPso6ADgZhUVFZI8W9ABAADgfyjoAAJScnKyx2agc3JyJEl5eXke2T8AAAD8E9egAwAAAABgAsygAwB8nifXFJA8v64AawoAAACJgg4AgEusKwAAALyBgg4A8HmeXFNAYl0BAADgHVyDDgAAAACACVDQAQAAAAAwAQo6AAAAAAAmQEEHAAAAAMAEKOgAAAAAAJgABR0AAAAAABOgoAMAAAAAYAIUdAAAAAAATCDY6AAAAAAAAPMrLCxUQUGBR/Zts9kkSVFRUR7ZvySlpqYqOTnZY/t3Bwo6AAAAAMBQFRUVkjxb0H0BBR0AAAAA4FJycrLHZqBzcnIkSXl5eR7Zv6/gGnQAAAAAAEyAgg4AAAAAgAlQ0AEAAAAAMAEKOgAAAAAAJkBBBwAAAADABCjoAAAAAACYgNdus2a32zVz5kx9+eWXatasmR5//HF16tTpvNecOnVKd911l5544gnFxcVJkoYOHaqWLVtKkjp06KA5c+Z4KzIAAAAAAF7jtYK+ZcsW1dTUaPXq1SoqKtLcuXO1ZMkS5/OffvqpHn30UZWVlTkfq66uliQtX77cWzEBmEheXp5KSkqMjtFo+/fvl/TT/Tx9TXx8vM9mBwAA8GVeK+i7d+9Wnz59JEndunXTZ599dt7zNTU1eu655zRlyhTnY/v27dOpU6c0duxY1dXVadKkSerWrZu3IgNeU15erlmzZmnmzJmKjo42Oo5plJSUaM/ne6RIo5M00o8XD+35do+xOZriuNEBAAAAApfXCnplZaUiIiKcXwcFBamurk7BwWcj9OjR44JtmjdvrqysLKWlpenQoUMaN26cCgsLndvUp7q6WsXFxe79BgAPWrFihfbu3atnnnlGo0aNMjqOaVRVVUmRkr2f3egoAcP6jlVVVVX8DP2ZqqoqSQqI96Vr164Nfi3jLQDAXQJprJXqH2+9VtAjIiJ08uRJ59d2u91l0Y6NjVWnTp1ksVgUGxuryMhIHT16VO3atfvF7UJDQxv1AQMwUnl5uT744AM5HA598MEHmjBhArPoPwoPD5eOGZ0i8ISHh3vkZ6ivXrIgSd9++60knXdplq/w5CULjLcAAHcJDw+X1LhfFPsjrxX0xMREbd++XampqSoqKlJCQoLLbdauXauvvvpKM2fOVFlZmSorK9W6dWsvpAW8Jz8/Xw6HQ9LZX1zl5+dr0qRJBqcC3K+kpET7iorU1uggTRD247+PFxUZmqOxDhsdAAAANIrXCnpSUpLee+89jRw5Ug6HQ7m5uXrrrbdUVVWl9PT0i24zYsQIPfjgg8rIyJDFYlFubq7LWXfA12zevFm1tbWSpNraWm3atImCDr/VVlKWLEbHCBgvyWF0BAAA0Ahea7tWq1WzZ88+77Fzt1L7T/+5YnuzZs00f/58j2cDjJSUlKSCggLV1tYqJCREgwYNMjoSAAAAAANYjQ4ABLrMzExZLGdnFK1WqzIzMw1OBAAAAMAIFHTAYDExMUpJSZHFYlFKSgoLxAEAAAABigu6ARPIzMzUoUOHmD0HAAB+pbCwUAUFBR7Zt81mkyRFRUV5ZP+pqalKTk72yL6B+lDQAROIiYnRokWLjI4BAADgMyoqKiR5rqADRqCgAwAAAPCI5ORkj81C5+TkSJLy8vI8sn/ACFyDDgAAAACACVDQAQAAAAAwAQo6AAAAAAAmQEEHAAAAAMAEKOgAAAAAAJgABR0AAAAAABOgoAMAAAAAYALcBx1ooMLCQhUUFHhk3zabTZIUFRXlkf2npqZ67B6kAAAAANyDgg6YQEVFhSTPFXQAAAAA5kdBBxooOTnZY7PQOTk5kqS8vDyP7B8AAACA+XENOgAAAAAAJkBBBwAAAADABCjoAAAAAACYAAUdAAAAAAAToKADAAAAAGACFHQAAAAAAEyA26zBr+Tl5amkpMToGI22f/9+ST/dbs3XxMfH+2x2AAAAwCwo6PArJSUl+uqz/1PHiDNGR2mUVg6LJOn0oY8NTtJ4X1cGGR0BAAAA8AsUdPidjhFn9HDPSqNjBIzHd0UYHQEAAADwC1yDDgAAAACACTCDDr9is9l09EQQs7peVHoiSK1tNqNjAACAJmINH2Owhg8uhoIOAAAABLCSkhLt+XyPFGl0kkb68VzgPd/uMTZHUxw3OgDMioIOvxIVFaXwHw5wDboXPb4rQs2jooyOAQAAfo1Iyd7PbnSKgGF9hyuNcXH8nwEAAAAAgAlQ0AEAAAAAMAFOcQcAAIBpFBYWqqCgwCP7tv24qGmUhy7NSk1NVXJyskf2DSAwUNDhd76u9Mwq7t/XWHS82jdPOokMteuSZg6P7PvryiAleGTPAAC4V0VFhSTPFXTADFiV3xjuWpWfgg6/Eh8f77F9V9lssv44sPuakOhojy3kliDPvu8AgMCSnJzssVnocx+e8/LyPLJ/wAxKSkq0r6hIbY0O0khhP/77eFGRoTma4rAb90VBh1/x1d+4AQAAAO7SVlKWLEbHCBgvyX1nqvrm+boAAAAAAPgZCjoAAAAAACbgtYJut9s1Y8YMpaena8yYMSotLb3gNadOndLIkSN14MCBBm8DAAAAAIA/8FpB37Jli2pqarR69Wr95S9/0dy5c897/tNPP9Xo0aP1zTffNHgbAAAAAAD8hdcK+u7du9WnTx9JUrdu3fTZZ5+d93xNTY2ee+45XXnllQ3eBgAAAAAAf+G1VdwrKysVEfHTvamDgoJUV1en4OCzEXr06NHobepTXV2t4uJiNyUHYJSqqiqjIwSkqqoqj/wM5c/TGI398+zatWuDX8t4C19z7ucQ/9+ej5/PxmC89S/uGm+9VtAjIiJ08uRJ59d2u91l0W7KNpIUGhraqA8YAMwpPDxcOmZ0isATHh7ukZ+h4eHhqnH7XuGKp/48JcZb+J7w8HBJjftFVCBgvDUG461/cdefp9dOcU9MTNSOHTskSUVFRUpISPDINgAAAAAA+CKvzaAnJSXpvffe08iRI+VwOJSbm6u33npLVVVVSk9Pb/A2AAAAAAD4I68VdKvVqtmzZ5/3WFxc3AWvW758+S9uAwAAAACAP/LaKe4AAAAAAKB+XptBB4DGstls0nHJ+g6/S/Sa45ItzGZ0CgAAgIDEp14AAAAAAEyAGXQAphUVFaXSU6Wy97MbHSVgWN+xKioqyugYAAAAAYkZdAAAAAAATICCDgAAAACACVDQAQAAAAAwAQo6AAAAAAAmQEEHAAAAAMAEWMUdgLn54n3QT//47+aGpmia45IuMzoEAABAYHJZ0Ldv367+/fs7vy4oKFBqaqpHQ/mLwsJCFRQUeGTfNptNkjx2O6TU1FQlJyd7ZN9AQ8XHxxsdoUn2798vSep8WWeDkzTBZb77vgMAAPi6egv69u3b9X//93/asGGD9uzZI0k6c+aMtm3bRkE3gYqKCkmeK+iAGeTk5BgdoUnO5c7LyzM4CQAAAHxJvQX9qquu0vHjxxUaGqrY2FhJksVi0W233ea1cL4uOTnZY7PQFAAAAAAA8C/1FvR27dpp2LBhGjJkiKxWH7v+EwBgOjabTWWSXpLD6CgB4ztJ9h8viQIAAObn8hr0ZcuWadmyZWre/KfVjnbu3OnRUAAAAAAABBqXBb2goED//Oc/FRYW5o08AAA/FRUVJevXXytLFqOjBIyX5FAka5UAAOAzXBb0yy677LzZcwAAAAD+w2az+eZtTX3ZcckWxiVIuJDLgl5bW6vBgwcrISFBFsvZWY/58+d7PBgAAADMJy8vTyUlJUbHaJJzt8H0xbuExMfH+2RueB9rvnifO9d8cVnQx40b55YDAQAAwPeVlJToq8/+Tx0jzhgdpdFaOc5ONp0+9LHBSRrn68ogj+4/KipKpadKZe9n9+hx8BPrO1Zul4yLclnQr776ai1btkxHjx5Vv3791KVLF2/kAgAAgEl1jDijh3tWGh0jYDy+K8LoCPAhrPnife5c88VlQZ8+fbr69u2rjz/+WDExMXrooYf0t7/9zS0HBwAElsPyzVPuztUQX/uIfFhSpNEhAABAg7ks6MePH9eIESO0bt06JSYmyuHwvQ9WAADjxcfHGx2hyY7+eN1qh86dDU7SOJHy7fcdAIBA47KgS9KBAwckSYcPH5bVyuqOAIDG8+XFjc5lz8vLMzgJAADwZy7b9kMPPaTp06friy++UE5OjqZNm+aNXAAAAAAABBSXM+hdunTR6tWrvZEFAAAAJmez2XT0RBALl3lR6YkgtXbTLZwAmFu9BT0nJ0d5eXnq3bv3Bc/t3LnTo6EAAAAAAAg09Rb0c9fZ7dy5U1VVVQoPD1dZWZnatGnjtXAAAAAwl6ioKIX/cIDbrHnR47si1Jx7ZgMBweU16M8++6yzrD/xxBNaunSpx0MBAAAAABBoXBb0bdu2OReGy8vL07Zt2zweCgg05eXlys7OVkVFhdFRAAAAABjE5SJxFotFNTU1atasmWpra7kPOuAB+fn52rt3r/Lz8zVp0iSj4wAAgEBzXLK+42O3Uz7947+bG5qiaY5LuszoEDAjlwV95MiRGjx4sBISEnTw4EHdfffd3sgFBIzy8nJt3LhRDodDGzduVGZmpqKjo42OBQAAAkR8fLzREZpk//79kqTOl3U2OEkTXOa77zs8y2VBT0tL0y233KJvvvlGl19+uaJYoAJwq/z8fOeZKXa7nVl0AADgVTk5OUZHaJJzuc+tlwX4g3oL+uLFi/XnP/9ZkyZNksViOe+5+fPnezwYECg2b96s2tpaSVJtba02bdpEQQcAAAACUL0FPSIiQpI0dOhQNW/uixd2AL4hKSlJBQUFqq2tVUhIiAYNGmR0JAAAALcoLCxUQUGBR/Z97hR3T50BkJqaquTkZI/sG6hPvStBrFu3TlVVVVq2bJm6d++ubt26Of8B4D6ZmZnOs1SsVqsyMzMNTgQAAGB+0dHRrNsDv1PvDHqvXr00dOhQHT582PmbI4fDIYvFoq1bt3otIODvYmJilJKSonXr1iklJYWBBgAA+I3k5GRmoYFGqLegt27dWps2bdKzzz6r8ePHezMTEHAyMzN16NAhZs8BAACAAFZvQV+9erU6dOigzZs3q3v37ufd/7x3796NPpDdbtfMmTP15ZdfqlmzZnr88cfVqVMn5/Pbtm3Tc889p+DgYA0fPlx//OMfJZ29Br5ly5aSpA4dOmjOnDmNPjZgdjExMVq0aJHRMQAAAAAYqN6Cfv/992vLli2qqKjQ+vXrz3uuKQV9y5Ytqqmp0erVq1VUVKS5c+dqyZIlks6uXD1nzhytXbtWYWFhysjIUP/+/dWqVStJ0vLlyxt9PAAAAHjG15VBenxXhNExGu37mrNrvlzSzOHilebydWWQEowOAcAr6i3oAwcO1MCBA7Vt2zYNGDBA33//vVq1anXBLdcaavfu3erTp48kqVu3bvrss8+czx04cEAdO3bUJZdcIknq0aOHdu3apfbt2+vUqVMaO3as6urqNGnSpAYtUlddXa3i4uIm5fQVVVVVkuT33yfgi/j76X8C6c+0a9euDX5tIIy3uFBUVJQ6XHmV7EYHaYLj33wjSWr5m8sNTtI4HX5z9n3n7xsa4tyYBe+qqqpq1N/R+sbbegv6OREREbrtttt05swZJScnq3379kpLS2t40h9VVlY6b90mSUFBQaqrq1NwcLAqKyudp7FLUosWLVRZWanmzZsrKytLaWlpOnTokMaNG6fCwkIFB/9y7NDQ0AZ9wMjLy1NJSUmjvxcz+PbbbyXJeRaCL4mPj/fY7TAAMwgPD5fUuKIDc+PP9OIaOt7Cv8ycOdPoCE127vNHXl6ewUkAzwkPD1eN0SECUHh4uFvGRJcFfeHChfrb3/6m7Oxs/elPf1JGRkaTCnpERIROnjzp/NputzuL9s+fO3nypFq2bKnY2Fh16tRJFotFsbGxioyM1NGjR9WuXbtGH/9iSkpKtOfTL2QPj3LL/rzJcubse7f7wGGDkzSOtcpmdAQAAAAAMCWXBd1qtSoyMlIWi0WhoaFq0aJFkw6UmJio7du3KzU1VUVFRUpI+OlKmri4OJWWlur48eMKDw/Xrl27lJWVpbVr1+qrr77SzJkzVVZWpsrKSrVu3bpJx6+PPTxKp6++za37RP2af7He9YsAAEDAKiwsVEFBgUf2vX//fkny2Jl8qamp3FIMwK/isqB37NhR8+fP17Fjx7R06VK1b9++SQdKSkrSe++9p5EjR8rhcCg3N1dvvfWWqqqqlJ6ermnTpikrK0sOh0PDhw9XmzZtNGLECD344IPKyMiQxWJRbm6uy9PbAQAAgIuJjo42OgIA/CKXbXfWrFlas2aNevbsqfDwcD322GNNOpDVatXs2bPPeywuLs753wMGDNCAAQPOe75Zs2aaP39+k44HAAAA35OcnMwsNICAZXX1AovFIrvdLofDoTNnzngjExBwysvLlZ2drYqKCqOjAAAAADCIy4L+yCOP6JtvvlHv3r317bff6uGHH/ZGLiCg5Ofna+/evcrPzzc6CgAAAACDuCzopaWlmjZtmgYOHKjp06fr66+/9kYuIGCUl5dr48aNcjgc2rhxI7PoAAAAQIByeQ16dXW1Tp06pbCwMJ0+fZrT3AE3y8/Pl8PhkHT29oP5+fmaNGmSwakAwDd4csVvSbLZzt4eNCrKM7dkZdVvAMB/cjmDfuedd2rIkCG67777NGTIEP3Xf/2XF2IBgWPz5s2qra2VJNXW1mrTpk0GJwIAnFNRUcGZTQAAr3E5g3777berb9+++uabb9ShQwddeuml3sjlFTabTdaqCu7N7UXWqgrZbM2MjmEqSUlJKigoUG1trUJCQjRo0CCjIwGAz/D0it/n7pedl5fnsWMAAHBOvQW9srJSjz76qGbNmqXIyEjt3LlTL7/8sh577DFFRER4MyPg1zIzM7Vx40ZJZ29HmJmZaXAiwPd4+jTn/fv3S/qprLkbpzkDAADpFwr6o48+qmuvvVYtWrSQdPY31GVlZZo5c6aefvpprwX0pKioKP2/YzU6ffVtRkcJGM2/WO+x6/h8VUxMjFJSUrRu3TqlpKQoOjra6EgAfoa/lwAAwBvqLejfffed5s+f/9MLg4OVlZWl9PR0rwQDAklmZqYOHTrE7DnQRJ4+zRkAAMAb6i3oVuvF148LCQnxWBggUMXExGjRokVGxwAAAABgoHpXce/UqZO2bNly3mNbt25V69atPR4KAAAAAIBAU+8M+tSpUzVp0iQ999xz6tChg7777jtFRUXpySef9GY+AADg4/Ly8lRSUmJ0jCbx9AKBnhQfH++TuQEgkNVb0Fu1aqUXX3xR//73v3XkyBG1a9dObdq08WY2AADgB0pKSrTn0y9kD/e9RUItZ85+VNp94LDBSRrHWmUzOgIAoAlc3ge9ffv2at++vTeyAAAAP2UPj+KuKV7U/Iv1RkcAADRBvdegAwAAAAAA76GgAwAAAABgAi5PcX/vvff0yiuvqKamxvnYq6++6tFQ3mStsvnkaWCW2lOSJEdImMFJGufsNXFtjY4BqLCwUAUFBR7ZtzcWlUpNTeW+3wAAAH7GZUGfM2eOpk+frrZt/a9UxcfHGx2hyc4VgM5xvvbn0tan33egIaKjo42OAAAAAB/ksqC3a9dON910kzeyeJ0v33rkXPa8vDyDkwC+KTk5mRloAADglw5LekkOo2M0SuWP/44wNEXTHJYU6aZ9uSzo0dHRmjFjhq6++mpZLBZJUnp6upsODwAAAABwF189W/Xoj2cId+jc2eAkjRcp973vLgt6hw4dJEnl5eVuOSAAAAAAwDN89SxhzhA+y+Uq7uPHj9c111yj0NBQXXXVVRo/frw3cgEAAAAAEFBcFvT58+frjTfeUEhIiP73f/9X8+bN80YuAAAAAAACistT3D/++GOtWrVKkpSZmak//vGPHg/lL3z5Nk7cwgkAAAAAvMtlQa+rq5PdbpfVapXD4XAuFAdjcRsnAICvsNlsslZVqPkX642OEjCsVRWy2ZoZHQMA0EguC3pqaqoyMjJ0/fXXa+/evUpNTfVGLr/AbZwAAAAAAA3lsqCPHTtWvXv31sGDBzVixAglJCR4IxcAAPATUVFR+n/HanT66tuMjhIwmn+xXlFRUUbHAAA0Ur0Ffc2aNUpLS9P8+fOdp7V/8cUXkqRJk/BrNW0AABYhSURBVCZ5Jx0AAAAAAAGi3oLetm1bSdKVV1553uNcgw4AABrLWmXzyWvQLbWnJEmOkDCDkzSOtcomqa3RMQAAjVRvQe/Tp48k6dNPP9WMGTOcj0+ZMkVDhw71fDIAAOAX4uPjjY7QZOfumtI5ztfKblufft8BIFDVW9BXrFihJUuW6Pvvv9emTZucj8fFxXklGAAA8A+euiWoN5zLnpeXZ3ASAEAgsNb3xOjRo7Vz507dd9992rlzp/Of/Px8b+YDAAAA3KK8vFzZ2dmqqKgwOgoAXJTLVdxHjhyp9evXq66uTg6HQ0eOHNG9997rjWwAAACA27zwwgv65JNP9MILL2j69OlGxwGAC7gs6Dk5Obriiiv01VdfKTQ0VGFhvrVICgAAAFBeXq7NmzdLkjZt2qR7771X0dHRBqcCgPPVe4r7f5o9e7ZiY2P1yiuv6Pvvv/d0JgAAAMCtXnjhBdntdkmS3W7XCy+8YHAiALhQgwp6dXW1Tp06JYvFoqqqKk9nAgAAANxqy5Yt5319bjYdAMzEZUEfPXq0/ud//ke9evXSzTfffMF90RvKbrdrxowZSk9P15gxY1RaWnre89u2bdPw4cOVnp6u1157rUHbAAAAAA1hsVh+8WsAMAOX16Dfeuutzv9OSUlRREREkw60ZcsW1dTUaPXq1SoqKtLcuXO1ZMkSSVJtba3mzJmjtWvXKiwsTBkZGerfv7/27NlT7zYAAABAQ91yyy16++23nV8PHDjQwDQAcHEuC/qqVau0atUq1dTUOB8rKCho9IF2796tPn36SJK6deumzz77zPncgQMH1LFjR11yySWSpB49emjXrl0qKiqqdxsAAACgoe69915t3rxZdrtdVquVuxIBMCWXBf3VV1/V0qVLneW5qSorK8+bfQ8KClJdXZ2Cg4NVWVmpli1bOp9r0aKFKisrf3GbX1JdXa3i4uJflRcAgEDUtWvXBr82EMbbc2vv+Pv3GSh+//vf64MPPtAf/vAHHTlyREeOHDE6EoAfBdrP2/rGW5cFvUuXLmrXrp2CgoJ+VYCIiAidPHnS+bXdbncW7Z8/d/LkSbVs2fIXt/kloaGhjfqAAQAAGi8Qxtvw8HBJjfvFBcxrypQpmjVrlqZMmcIt1gCT4eftWS7b7g033KCBAwfq8ssvl8PhkMVi0auvvtroAyUmJmr79u1KTU1VUVGREhISnM/FxcWptLRUx48fV3h4uHbt2qWsrCxZLJZ6twEAAAAaIyYmRosWLTI6BgDUy2VBX716tZ555pnzTkFviqSkJL333nsaOXKkHA6HcnNz9dZbb6mqqkrp6emaNm2asrKy5HA4NHz4cLVp0+ai2wAAAAAA4I9cFvQ2bdro2muvldXaoFum18tqtWr27NnnPRYXF+f87wEDBmjAgAEutwEAAAAAwB+5LOg1NTUaMmSIOnfu7Lxf5Pz58z0eDAAAAACAQOKyoGdkZKhVq1beyAIAAAAAQMByWdBfeuklrVy50htZAAAAAAAIWC4L+iWXXKL8/HzFxsY6r0Pv3bu3x4MBAAC4UlhYqIKCAo/tf//+/ZKknJwcj+w/NTVVycnJHtk3AMD3uCzol156qfbt26d9+/Y5H6OgAwCAQMC9sgEA3uSyoM+ZM0dfffWVSkpKFBsbG/A3jgcAAOaRnJzMDDQAwG+4LOjLly/X+vXrdd111+nll19WSkqKsrKyvJENAAAAAICA4bKgr1+/XitWrFBwcLBqa2s1cuRICjoAAAAAAG5mdfUCh8Oh4OCzPT4kJEQhISEeDwUAAAAAQKBxOYOemJionJwc9ejRQ7t371b37t29kQsAAAAAgIBS7wz6xx9/LEmaOHGi7rjjDtXV1emOO+7Q1KlTvRYOAAAAAIBAUW9BnzdvnqqqqnT33XerV69eGjNmjG666SbV1NR4Mx8AAAAAAAGh3lPce/XqpaFDh+rw4cPO25c4HA5ZLBZt3brVawEBAAAAAAgE9Rb0iRMnauLEiXruued03333eTMTAAAAAAABx+UiccOGDdOyZctUXV3tfGz8+PEeDQUAAAAAQKBxeZu1CRMmqLKyUjExMc5/AAAAAACAe7mcQW/RooUmTpzojSwAAAAAAAQslwW9c+fO2rBhg7p27SqLxSJJio2N9XgwAAAAAAACicuCXlxcrOLiYufXFotFr776qkdDAQAAAAAQaFwW9OXLl3sjBwAAAAAAAa3egp6enu48pf3nVq1a5bFAAAAAAAAEonoL+oIFC7yZAwAAAACAgFZvQb/sssu8mQMAAAAAgIDm8j7oAAAAAADA8yjoAAAAAACYAAUdAAAAAAAToKADAAAAAGACFHQAAAAAAEyAgg4AAAAAgAlQ0AEAAAD4nPLycmVnZ6uiosLoKIDbUNABAAAA+Jz8/Hzt3btX+fn5RkcB3IaCDgAAAMCnlJeXa+PGjXI4HNq4cSOz6PAbFHQAAAAAPiU/P18Oh0OSZLfbmUWH36CgAwAAAPApmzdvVm1trSSptrZWmzZtMjgR4B4UdAAAAAA+JSkpSSEhIZKkkJAQDRo0yOBEgHtQ0AEAAAD4lMzMTFksFkmS1WpVZmamwYkA9wj21oFOnz6tyZMnq6KiQi1atNC8efMUFRV13mtee+01rVq1SsHBwfrv//5v9e/fXw6HQ3379tUVV1whSerWrZv+8pe/eCs2AAAAAJOJiYlRSkqK1q1bp5SUFEVHRxsdCXALrxX0lStXKiEhQdnZ2dqwYYMWL16shx9+2Pn80aNHtXz5cr3++uuqrq7WqFGj1KtXL3333Xf67W9/q+eff95bUQEAAACYXGZmpg4dOsTsOfyK105x3717t/r06SNJ6tu3r95///3znt+7d6+6d++uZs2aqWXLlurYsaP27dunzz//XGVlZRozZozGjRungwcPeisyAAAAAJOKiYnRokWLmD2HX/HIDPqaNWsuuNVBdHS0WrZsKUlq0aKFTpw4cd7zlZWVzufPvaayslKtW7fWPffco5SUFO3atUuTJ0/W66+//ovHr66uVnFxsZu+GwAAAkfXrl0b/FrGWwCAu1RVVUlSwIwr9Y23HinoaWlpSktLO++x8ePH6+TJk5KkkydPqlWrVuc9HxER4Xz+3Gtatmyp+Ph4BQUFSZJ69uypsrIyORwO56IQFxMaGtqoDxgAAKDxGG8BAO4SHh4uqXG/KPZHXjvFPTExUe+++64kaceOHerRo8d5z1933XXavXu3qqurdeLECR04cEAJCQl69tlnnbPx+/btU/v27X+xnAMAAADwf+Xl5crOzlZFRYXRUQC38doicRkZGZo6daoyMjIUEhKi+fPnS5JeeeUVdezYUbfccovGjBmjUaNGyeFwaOLEiQoNDdU999yjyZMn691331VQUJDmzJnjrcgAAAAATCo/P1979+5Vfn6+Jk2aZHQcwC0sDofDYXQIdysuLg74UyMAAPA0xlsARikvL9fIkSNVU1Oj0NBQrVq1isXifFxOTo4kKS8vz+AkxvLaKe4AAAAA4A75+fk6N89ot9svWKAa8FUUdAAAAAA+ZfPmzaqtrZUk1dbWatOmTQYnAtyDgg4AAADApyQlJSkkJESSFBISokGDBhmcCHAPCjoAAAAAn5KZmem8s5PValVmZqbBiQD3oKADAAAA8CkxMTFKSUmRxWJRSkoKC8TBb3jtNmsAAAAA4C6ZmZk6dOgQs+fwKxR0AAAAAD4nJiZGixYtMjoG4Fac4g4AAAAAgAlQ0AEAAAAAMAEKOgAAAAAAJkBBBwAAAADABCjoAAAAAACYAAUdAAAAAAAToKADAAAAAGACFHQAAAAAAEyAgg4AAAAAgAlQ0AEAAAAAMAEKOgAAAAAAJkBBBwAAAADABCjoAAAAAACYAAUdAAAAAAAToKADAAAAAGACFHQAAAAAAEyAgg4AAAAAgAlQ0AEAAAAAMAEKOgAAAAAAJkBBBwAAAADABCjoAAAAAACYAAUdAAAAAAAToKADAAAAAGACFHQAAAAAAEyAgg4AAAAAgAlQ0AEAAAAAMAEKOgAAAAAAJkBBBwAAAADABCjoAAAAAACYAAUdAAAAAAAT8FpBP336tLKzszVq1CiNGzdONpvtoq+z2WwaNGiQqqurG7UdAAAAAAC+zGsFfeXKlUpISNDf//53DR06VIsXL77gNf/85z81duxYlZeXN2o7AAAAAAB8XbC3DrR7927dfffdkqS+fftetGhbrVa98sorGj58eKO2+7nq6moVFxe7KTkAAIGja9euDX4t4y0AwF2qqqokKWDGlfrGW48U9DVr1ig/P/+8x6Kjo9WyZUtJUosWLXTixIkLtuvVq9cFj1VWVrrc7udCQ0Mb9QEDAAA0HuMtAMBdwsPDJTXuF8X+yCMFPS0tTWlpaec9Nn78eJ08eVKSdPLkSbVq1apB+4qIiGjSdgAAAAAA+BKvXYOemJiod999V5K0Y8cO9ejRw6PbAQAAAADgSywOh8PhjQOdOnVKU6dO1dGjRxUSEqL58+erdevWeuWVV9SxY0fdcsstztcOGDBAGzduVGhoaL3b/ZLi4uKAPzUCAABPY7wFgMBSWFiogoICj+x7//79kqTOnTt7ZP+SlJqaquTkZI/t3x28tkhcWFiY8vLyLnj8rrvuuuCxbdu2udwOAAAAAOAfoqOjjY5gCl4r6AAAAAAA35WcnGz6GWhf57Vr0AEAAAAAQP0o6AAAAAAAmAAFHQAAAAAAE6CgAwAAAABgAhR0AAAAAABMgIIOAAAAAIAJUNABAAAAADABCjoAAAAAACZAQQcAAAAAwAQo6AAAAAAAmAAFHQAAAABgqPLycmVnZ6uiosLoKIaioAMAAAAADJWfn6+9e/cqPz/f6CiGoqADAAAAAAxTXl6ujRs3yuFwaOPGjQE9i05BBwAAAAAYJj8/Xw6HQ5Jkt9sDehadgg4AAAAAMMzmzZtVW1srSaqtrdWmTZsMTmQcCjoAAAAAwDBJSUkKCQmRJIWEhGjQoEEGJzIOBR0AAAAAYJjMzExZLBZJktVqVWZmpsGJjENBBwAAAAAYJiYmRikpKbJYLEpJSVF0dLTRkQwTbHQAAAAAAEBgy8zM1KFDhwJ69lyioAMAAAAADBYTE6NFixYZHcNwnOIOAAAAAIAJUNABAAAAADABCjoAAAAAACZAQQcAAAAAwAQo6AAAAAAAmAAFHQAAAAAAE6CgAwAAAABgAhR0AAAAAABMINjoAJ5QXV2t4uJio2MAAOBzgoOD1blz5wa9lvEWAICmqW+8tTgcDocBeQAAAAAAwH/gFHcAAAAAAEyAgg4AAAAAgAlQ0AEAAAAAMAEKOgAAAAAAJkBBBwAAAADABCjoAAAAAACYAAXdR33yyScaM2aM0THgJkOHDtWYMWM0ZswYPfjgg0bHQRP959/L0tJSZWRkaNSoUXr00Udlt9sNToeGqq2t1eTJkzVq1CiNGDFCW7dudT6Xm5urlStXGpgO3sZ4618Yb/0D461/YLy9uGCjA6Dxli1bpnXr1iksLMzoKHCD6upqSdLy5csNToJf4+d/L+fMmaMJEyboD3/4g2bMmKGtW7cqKSnJ4JRoiHXr1ikyMlJPPfWUjh07pmHDhql79+6aMmWKDh06pKysLKMjwksYb/0L461/YLz1H4y3F8cMug/q2LGjFi1aZHQMuMm+fft06tQpjR07VnfeeaeKioqMjoQm+Pnfy88//1y///3vJUl9+/bVv/71L6OioZGSk5N1//33O78OCgrSyZMnlZ2drSFDhhiYDN7GeOtfGG/9A+Ot/2C8vTgKug+69dZbFRzMyQ/+onnz5srKytJLL72kWbNm6YEHHlBdXZ3RsdBIP/976XA4ZLFYJEktWrTQiRMnjIqGRmrRooUiIiJUWVmpnJwcTZgwQZdffrmuv/56o6PByxhv/QvjrX9gvPUfjLcXR0EHDBYbG6vbb79dFotFsbGxioyM1NGjR42OhV/Jav3px+vJkyfVqlUrA9Ogsb777jvdeeedGjJkiAYPHmx0HABuwHjrnxhvfRvj7YUo6IDB1q5dq7lz50qSysrKVFlZqdatWxucCr/W1VdfrQ8//FCStGPHDvXs2dPgRGio8vJyjR07VpMnT9aIESOMjgPATRhv/RPjre9ivL04CjpgsBEjRujEiRPKyMjQxIkTlZubyymVfmDq1KlatGiR0tPTVVtbq1tvvdXoSGig559/Xj/88IMWL17sXO359OnTRscC8Csx3vonxlvfxXh7cRaHw+EwOgQAAAAAAIGOGXQAAAAAAEyAgg4AAAAAgAlQ0AEAAAAAMAEKOgAAAAAAJkBBBwAAAADABCjoAC7qjTfe0NNPP92obQYMGKDq6mqXr/vwww81ceLEpka7wI4dOzRt2jS37Q8AAG9hvAXwnyjoAAAAAACYQLDRAQCY28svv6wNGzYoODhYPXv21OTJk/XDDz9o8uTJqqys1JkzZ3T//ffrxhtvdG6zcuVKvffee1qwYIG2bdumFStWOJ9buHChJKm0tFR33323bDab+vfvr+zsbH355Zd6/PHHJUmRkZHKzc1VeHi4ZsyYocOHD+vYsWPq27evJkyYoAMHDmj69OkKCwtTWFiYLrnkEu++MQAAuBHjLQCJgg7gF5SWlurDDz/UqlWrFBwcrOzsbG3fvl0fffSRbrrpJmVmZqqsrEwZGRnasmWLJGn58uUqLi7WwoULFRQUpEOHDmnp0qUKCwvTjBkztHPnTrVp00bV1dVavHixzpw5o379+ik7O1uPPPKIcnNzFR8frzVr1ujFF19UWlqaunXrprS0NFVXVzs/MCxcuFA5OTnq1auXli5dqoMHDxr8bgEA0DSMtwDOoaADqFdxcbH69eunkJAQSVLPnj21f/9+HThwQIMHD5YktWnTRhEREbLZbJKk999/X0FBQQoKCpIkRUdHa+rUqWrRooUOHjyobt26SZI6d+6sZs2aSZKCg8/+KDpw4IBmzZolSaqtrVVsbKwiIyP16aef6oMPPlBERIRqamokSfv379d1110nSUpMTOQDAwDAZzHeAjiHa9AB1Ktr167au3ev6urq5HA49PHHHys2NlZxcXHatWuXJKmsrEw//PCDIiMjJUmLFy9Wq1attHLlSp04cUJ5eXn661//qscff1yhoaFyOBySJIvFcsHxYmNjNW/ePC1fvlyTJ0/WzTffrDfeeEMtW7bU/PnzNXbsWJ0+fVoOh0NXXnml9uzZI0n67LPPvPSOAADgfoy3AM5hBh1AvTp16qTExERlZGTIbrerR48eGjhwoH73u99p+vTpevvtt3X69GnNnj3b+Vt5SXr44YeVlpamG2+8UYmJiRo2bJjCw8PVqlUrHTlyRB06dLjo8WbOnKmpU6fqzJkzkqQnnnhCcXFxmjRpknbv3q2wsDB16tRJR44c0aOPPqqJEyfqpZdeUlRUlEJDQ73yngAA4G6MtwDOsTjO/XoNAAAAAAAYhlPcAQAAAAAwAQo6AAAAAAAmQEEHAAAAAMAEKOgAAAAAAJgABR0AAAAAABOgoAMAAAAAYAIUdAAAAAAATOD/Ax5bWQs8fovMAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 1008x360 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes =plt.subplots(ncols=2, figsize=(14,5), sharey=True)\n",
    "sns.boxplot(x='lookahead', y='ic_by_day',data=lr_metrics, ax=axes[0])\n",
    "axes[0].set_title('IC by Day')\n",
    "sns.boxplot(x='lookahead', y='ic',data=lr_metrics, ax=axes[1])\n",
    "axes[1].set_title('IC Overall')\n",
    "axes[0].set_ylabel('Information Coefficient')\n",
    "axes[1].set_ylabel('')\n",
    "sns.despine()\n",
    "fig.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Best Train/Test Period Lengths"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Show the best train/test period settings for the four prediction horizons:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:55.584251Z",
     "start_time": "2020-06-20T04:04:55.562677Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>lookahead</th>\n",
       "      <th>train_length</th>\n",
       "      <th>test_length</th>\n",
       "      <th>ic_by_day</th>\n",
       "      <th>ic</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>1</td>\n",
       "      <td>126</td>\n",
       "      <td>21</td>\n",
       "      <td>0.016474</td>\n",
       "      <td>0.038787</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>1</td>\n",
       "      <td>63</td>\n",
       "      <td>21</td>\n",
       "      <td>0.032331</td>\n",
       "      <td>0.037011</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1</td>\n",
       "      <td>252</td>\n",
       "      <td>21</td>\n",
       "      <td>0.041881</td>\n",
       "      <td>0.031747</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>5</td>\n",
       "      <td>63</td>\n",
       "      <td>21</td>\n",
       "      <td>0.146735</td>\n",
       "      <td>0.109198</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>5</td>\n",
       "      <td>126</td>\n",
       "      <td>21</td>\n",
       "      <td>0.116183</td>\n",
       "      <td>0.102736</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>5</td>\n",
       "      <td>126</td>\n",
       "      <td>5</td>\n",
       "      <td>0.113430</td>\n",
       "      <td>0.074883</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>10</td>\n",
       "      <td>126</td>\n",
       "      <td>5</td>\n",
       "      <td>0.099731</td>\n",
       "      <td>0.140347</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>10</td>\n",
       "      <td>126</td>\n",
       "      <td>21</td>\n",
       "      <td>0.158187</td>\n",
       "      <td>0.137948</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>10</td>\n",
       "      <td>63</td>\n",
       "      <td>5</td>\n",
       "      <td>0.080292</td>\n",
       "      <td>0.123763</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>21</td>\n",
       "      <td>63</td>\n",
       "      <td>21</td>\n",
       "      <td>0.174732</td>\n",
       "      <td>0.162057</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>21</td>\n",
       "      <td>63</td>\n",
       "      <td>5</td>\n",
       "      <td>0.072316</td>\n",
       "      <td>0.114682</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>21</td>\n",
       "      <td>126</td>\n",
       "      <td>21</td>\n",
       "      <td>0.162777</td>\n",
       "      <td>0.114346</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    lookahead  train_length  test_length  ic_by_day        ic\n",
       "7           1           126           21   0.016474  0.038787\n",
       "9           1            63           21   0.032331  0.037011\n",
       "5           1           252           21   0.041881  0.031747\n",
       "19          5            63           21   0.146735  0.109198\n",
       "17          5           126           21   0.116183  0.102736\n",
       "16          5           126            5   0.113430  0.074883\n",
       "26         10           126            5   0.099731  0.140347\n",
       "27         10           126           21   0.158187  0.137948\n",
       "28         10            63            5   0.080292  0.123763\n",
       "39         21            63           21   0.174732  0.162057\n",
       "38         21            63            5   0.072316  0.114682\n",
       "37         21           126           21   0.162777  0.114346"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(lr_metrics.groupby('lookahead', group_keys=False)\n",
    " .apply(lambda x: x.nlargest(3, 'ic')))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:55.590418Z",
     "start_time": "2020-06-20T04:04:55.585399Z"
    }
   },
   "outputs": [],
   "source": [
    "lr_metrics.to_csv(results_path / 'lin_reg_performance.csv', index=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## LightGBM Random Forest Model Tuning"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Helper function to obtain the LightGBM feature importance metrics:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:55.602085Z",
     "start_time": "2020-06-20T04:04:55.591597Z"
    }
   },
   "outputs": [],
   "source": [
    "def get_fi(model):\n",
    "    fi = model.feature_importance(importance_type='gain')\n",
    "    return (pd.Series(fi / fi.sum(),\n",
    "                      index=model.feature_name()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "LightGBM base parameter settings that are independent of hyperparameter tuning:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:55.609885Z",
     "start_time": "2020-06-20T04:04:55.602958Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "base_params = dict(boosting_type='rf',\n",
    "                   objective='regression',\n",
    "                   bagging_freq=1,\n",
    "                   verbose=-1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Hyperparameter Options"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We run this experiment with different parameters for the bagging and feature fractions that determine the degree of randomization as well as the minimum number of samples for a split to control overfitting:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:55.618194Z",
     "start_time": "2020-06-20T04:04:55.610715Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "bagging_fraction_opts = [.5, .75, .95]\n",
    "feature_fraction_opts = [.75, .95]\n",
    "min_data_in_leaf_opts = [250, 500, 1000]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This gives us 3x2x3=18 parameter combinations:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:55.648202Z",
     "start_time": "2020-06-20T04:04:55.619008Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "18"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cv_params = list(product(bagging_fraction_opts,\n",
    "                         feature_fraction_opts,\n",
    "                         min_data_in_leaf_opts))\n",
    "n_cv_params = len(cv_params)\n",
    "n_cv_params"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Random Sample"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To limit the running time, we can randomly sample a subset of the parameter combinations (here: 50%):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:55.657255Z",
     "start_time": "2020-06-20T04:04:55.649117Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "# CV parameters: 18\n"
     ]
    }
   ],
   "source": [
    "sample_proportion = .5\n",
    "sample_size = int(sample_proportion * n_cv_params)\n",
    "\n",
    "cv_param_sample = np.random.choice(list(range(n_cv_params)), \n",
    "                                     size=int(sample_size), \n",
    "                                     replace=False)\n",
    "cv_params_ = [cv_params[i] for i in cv_param_sample]\n",
    "print('# CV parameters:', len(cv_params_))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We tune the number of trees by evaluating a fully grown forest for various smaller sizes:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:55.664851Z",
     "start_time": "2020-06-20T04:04:55.658506Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "num_iterations = [25] + list(range(50, 501, 25))\n",
    "num_boost_round = num_iterations[-1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Train/Test Period Lenghts"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As above for linear regression, we define a range of train/test period length:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Define parameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:55.672855Z",
     "start_time": "2020-06-20T04:04:55.666176Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "train_lengths = [5 * YEAR, 3 * YEAR, YEAR, 126, 63]\n",
    "test_lengths = [5, 21]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:55.692038Z",
     "start_time": "2020-06-20T04:04:55.673954Z"
    }
   },
   "outputs": [],
   "source": [
    "test_params = list(product(train_lengths, test_lengths))\n",
    "n_test_params = len(test_params)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Random sample"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Just as for the model parameters, we can randomly sample from the 5 x 2 = 8 training configurations (here: 50%):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:55.701325Z",
     "start_time": "2020-06-20T04:04:55.696457Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train configs: 3\n",
      "CV Iterations: 54\n"
     ]
    }
   ],
   "source": [
    "sample_proportion = 1.0\n",
    "sample_size = int(sample_proportion * n_test_params)\n",
    "\n",
    "test_param_sample = np.random.choice(list(range(n_test_params)), \n",
    "                                     size=int(sample_size), \n",
    "                                     replace=False)\n",
    "test_params_ = [test_params[i] for i in test_param_sample]\n",
    "print('Train configs:', len(test_params_))\n",
    "print('CV Iterations:', len(cv_params_) * len(test_params_))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Categorical Variables"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To leverage LightGBM's ability to handle categorical variables, we need to define them; we'll also `factorize` them so they are both integer-encoded and start at zero (optional, but otherwise throws a warning) as expected by LightGBM:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:55.780640Z",
     "start_time": "2020-06-20T04:04:55.702497Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "categoricals = ['year', 'weekday', 'month']\n",
    "for feature in categoricals:\n",
    "    data[feature] = pd.factorize(data[feature], sort=True)[0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Run Cross-Validation"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Set up some helper variabels and storage locations to faciliate the CV process and result storage:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:55.789497Z",
     "start_time": "2020-06-20T04:04:55.781634Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "labels = sorted(cv_data.filter(like='fwd').columns)\n",
    "features = cv_data.columns.difference(labels).tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:55.797240Z",
     "start_time": "2020-06-20T04:04:55.790541Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "label_dict = dict(zip(lookaheads, labels))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T15:48:14.787163Z",
     "start_time": "2020-06-22T15:48:14.785100Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "cv_store = Path(results_path / 'parameter_tuning.h5')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T04:04:55.812602Z",
     "start_time": "2020-06-20T04:04:55.806130Z"
    }
   },
   "outputs": [],
   "source": [
    "ic_cols = ['bagging_fraction',\n",
    "           'feature_fraction',\n",
    "           'min_data_in_leaf',\n",
    "           't'] + [str(n) for n in num_iterations]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we take the following steps:\n",
    "- we iterate over the prediction horizons and train/test period length, \n",
    "- set up the `MultipleTimeSeriesCV` accordingly\n",
    "- create the binary LightGBM dataset with the appropriate target, and\n",
    "- iterate over the model hyperparamters to train and validate the model while capturing the relevant performance metrics:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T13:37:54.346461Z",
     "start_time": "2020-06-20T04:04:55.813656Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Lookahead:  1 | Train:  63 | Test: 21 | Params:  18\n",
      "  0 | 00:01:08 | 50% | 75% |   250 |  2.03% |  1.09% |  0.91%\n",
      "  1 | 00:02:19 | 50% | 75% |   500 |  2.14% |  1.25% |  1.15%\n",
      "  2 | 00:03:35 | 75% | 75% | 1,000 |  2.07% |  1.35% |  1.20%\n",
      "  3 | 00:04:32 | 50% | 95% | 1,000 |  2.29% |  1.04% |  1.07%\n",
      "  4 | 00:05:36 | 50% | 95% |   250 |  2.63% |  1.03% |  0.82%\n",
      "  5 | 00:06:43 | 95% | 75% |   500 |  1.84% |  0.88% |  0.83%\n",
      "  6 | 00:07:49 | 95% | 95% |   500 |  2.58% |  0.86% |  0.62%\n",
      "  7 | 00:08:56 | 95% | 95% |   250 |  2.04% |  0.77% |  0.36%\n",
      "  8 | 00:10:00 | 75% | 95% | 1,000 |  2.51% |  1.06% |  0.68%\n",
      "  9 | 00:10:57 | 50% | 75% | 1,000 |  1.99% |  1.11% |  1.25%\n",
      " 10 | 00:12:02 | 75% | 95% |   250 |  2.06% |  0.93% |  0.38%\n",
      " 11 | 00:13:07 | 95% | 95% | 1,000 |  2.33% |  0.92% |  1.27%\n",
      " 12 | 00:14:09 | 50% | 95% |   500 |  2.57% |  1.19% |  1.15%\n",
      " 13 | 00:15:16 | 95% | 75% |   250 |  1.42% |  0.91% |  0.69%\n",
      " 14 | 00:16:23 | 75% | 75% |   500 |  1.49% |  1.04% |  1.14%\n",
      " 15 | 00:17:28 | 75% | 95% |   500 |  2.01% |  0.85% |  0.49%\n",
      " 16 | 00:18:34 | 95% | 75% | 1,000 |  1.85% |  0.96% |  1.08%\n",
      " 17 | 00:19:40 | 75% | 75% |   250 |  1.45% |  1.06% |  0.97%\n",
      "Lookahead:  1 | Train: 252 | Test: 21 | Params:  18\n",
      "  0 | 00:01:45 | 50% | 75% |   250 |  2.09% |  1.21% |  1.40%\n",
      "  1 | 00:03:31 | 50% | 75% |   500 |  1.93% |  1.11% |  1.49%\n",
      "  2 | 00:05:30 | 75% | 75% | 1,000 |  2.22% |  0.92% |  1.42%\n",
      "  3 | 00:07:27 | 50% | 95% | 1,000 |  2.17% |  1.25% |  1.64%\n",
      "  4 | 00:09:21 | 50% | 95% |   250 |  2.67% |  0.90% |  1.18%\n",
      "  5 | 00:11:40 | 95% | 75% |   500 |  2.62% |  1.10% |  1.83%\n",
      "  6 | 00:13:49 | 95% | 95% |   500 |  3.14% |  0.87% |  1.24%\n",
      "  7 | 00:15:57 | 95% | 95% |   250 |  3.40% |  0.95% |  1.26%\n",
      "  8 | 00:17:57 | 75% | 95% | 1,000 |  2.39% |  0.85% |  1.52%\n",
      "  9 | 00:19:46 | 50% | 75% | 1,000 |  1.56% |  1.17% |  2.22%\n",
      " 10 | 00:21:44 | 75% | 95% |   250 |  3.15% |  1.08% |  1.21%\n",
      " 11 | 00:23:53 | 95% | 95% | 1,000 |  2.85% |  0.76% |  0.88%\n",
      " 12 | 00:25:40 | 50% | 95% |   500 |  2.35% |  0.85% |  0.92%\n",
      " 13 | 00:27:44 | 95% | 75% |   250 |  2.70% |  1.07% |  1.56%\n",
      " 14 | 00:29:41 | 75% | 75% |   500 |  2.43% |  1.12% |  1.44%\n",
      " 15 | 00:31:39 | 75% | 95% |   500 |  2.86% |  1.01% |  1.16%\n",
      " 16 | 00:33:46 | 95% | 75% | 1,000 |  2.47% |  0.92% |  1.45%\n",
      " 17 | 00:35:41 | 75% | 75% |   250 |  2.61% |  1.19% |  1.53%\n",
      "Lookahead:  1 | Train: 756 | Test: 21 | Params:  18\n",
      "  0 | 00:03:39 | 50% | 75% |   250 |  2.53% |  0.90% |  1.00%\n",
      "  1 | 00:07:23 | 50% | 75% |   500 |  2.48% |  1.10% |  1.34%\n",
      "  2 | 00:11:55 | 75% | 75% | 1,000 |  2.27% |  1.09% |  1.33%\n",
      "  3 | 00:15:49 | 50% | 95% | 1,000 |  1.99% |  1.10% |  1.11%\n",
      "  4 | 00:19:31 | 50% | 95% |   250 |  1.15% |  0.89% |  1.33%\n",
      "  5 | 00:24:28 | 95% | 75% |   500 |  1.31% |  0.92% |  1.34%\n",
      "  6 | 00:29:44 | 95% | 95% |   500 |  0.21% |  0.93% |  1.27%\n",
      "  7 | 00:34:55 | 95% | 95% |   250 | -0.05% |  1.07% |  1.32%\n",
      "  8 | 00:39:44 | 75% | 95% | 1,000 |  0.81% |  0.92% |  1.20%\n",
      "  9 | 00:43:37 | 50% | 75% | 1,000 |  2.78% |  1.18% |  1.23%\n",
      " 10 | 00:48:38 | 75% | 95% |   250 |  0.13% |  0.96% |  1.08%\n",
      " 11 | 00:54:04 | 95% | 95% | 1,000 |  0.61% |  0.74% |  0.76%\n",
      " 12 | 00:57:50 | 50% | 95% |   500 |  1.57% |  0.94% |  1.10%\n",
      " 13 | 01:02:44 | 95% | 75% |   250 |  1.14% |  0.85% |  1.18%\n",
      " 14 | 01:07:10 | 75% | 75% |   500 |  1.94% |  1.11% |  1.12%\n",
      " 15 | 01:11:48 | 75% | 95% |   500 |  0.39% |  0.90% |  1.19%\n",
      " 16 | 01:16:54 | 95% | 75% | 1,000 |  1.71% |  0.99% |  1.60%\n",
      " 17 | 01:21:12 | 75% | 75% |   250 |  1.81% |  0.99% |  1.09%\n",
      "Lookahead:  5 | Train:  63 | Test: 21 | Params:  18\n",
      "  0 | 00:01:04 | 50% | 75% |   250 | -3.99% | -2.15% | -1.68%\n",
      "  1 | 00:02:06 | 50% | 75% |   500 | -4.28% | -2.13% | -1.97%\n",
      "  2 | 00:03:11 | 75% | 75% | 1,000 | -4.27% | -2.32% | -1.79%\n",
      "  3 | 00:04:06 | 50% | 95% | 1,000 | -4.62% | -2.52% | -2.08%\n",
      "  4 | 00:05:09 | 50% | 95% |   250 | -4.42% | -2.27% | -1.89%\n",
      "  5 | 00:06:17 | 95% | 75% |   500 | -5.14% | -2.11% | -1.63%\n",
      "  6 | 00:07:25 | 95% | 95% |   500 | -5.14% | -1.84% | -1.13%\n",
      "  7 | 00:08:33 | 95% | 95% |   250 | -5.15% | -1.86% | -1.42%\n",
      "  8 | 00:09:38 | 75% | 95% | 1,000 | -4.80% | -2.11% | -1.43%\n",
      "  9 | 00:10:36 | 50% | 75% | 1,000 | -4.40% | -2.38% | -2.21%\n",
      " 10 | 00:11:41 | 75% | 95% |   250 | -4.71% | -2.31% | -1.66%\n",
      " 11 | 00:12:48 | 95% | 95% | 1,000 | -5.61% | -2.27% | -1.52%\n",
      " 12 | 00:13:51 | 50% | 95% |   500 | -4.72% | -2.34% | -2.20%\n",
      " 13 | 00:15:01 | 95% | 75% |   250 | -5.22% | -1.97% | -1.39%\n",
      " 14 | 00:16:08 | 75% | 75% |   500 | -4.10% | -2.34% | -1.98%\n",
      " 15 | 00:17:13 | 75% | 95% |   500 | -4.78% | -2.26% | -1.86%\n",
      " 16 | 00:18:21 | 95% | 75% | 1,000 | -5.57% | -2.41% | -2.02%\n",
      " 17 | 00:19:28 | 75% | 75% |   250 | -4.25% | -2.04% | -1.43%\n",
      "Lookahead:  5 | Train: 252 | Test: 21 | Params:  18\n",
      "  0 | 00:01:45 | 50% | 75% |   250 | -0.52% |  1.63% |  2.39%\n",
      "  1 | 00:03:30 | 50% | 75% |   500 | -0.50% |  1.41% |  2.15%\n",
      "  2 | 00:05:28 | 75% | 75% | 1,000 | -0.68% |  0.73% |  1.54%\n",
      "  3 | 00:07:15 | 50% | 95% | 1,000 | -1.10% |  0.75% |  1.39%\n",
      "  4 | 00:09:01 | 50% | 95% |   250 | -0.96% |  1.17% |  1.79%\n",
      "  5 | 00:11:08 | 95% | 75% |   500 | -0.82% |  1.70% |  2.06%\n",
      "  6 | 00:13:18 | 95% | 95% |   500 | -0.97% |  1.27% |  1.60%\n",
      "  7 | 00:15:30 | 95% | 95% |   250 | -0.91% |  1.24% |  1.54%\n",
      "  8 | 00:17:30 | 75% | 95% | 1,000 | -0.76% |  1.37% |  1.96%\n",
      "  9 | 00:19:15 | 50% | 75% | 1,000 | -0.84% |  0.93% |  1.95%\n",
      " 10 | 00:21:14 | 75% | 95% |   250 | -1.06% |  1.58% |  2.10%\n",
      " 11 | 00:23:28 | 95% | 95% | 1,000 | -0.85% |  1.31% |  1.60%\n",
      " 12 | 00:25:15 | 50% | 95% |   500 | -0.92% |  1.46% |  2.16%\n",
      " 13 | 00:27:22 | 95% | 75% |   250 | -0.75% |  1.63% |  1.93%\n",
      " 14 | 00:29:18 | 75% | 75% |   500 | -0.72% |  1.16% |  2.15%\n",
      " 15 | 00:31:16 | 75% | 95% |   500 | -1.04% |  1.48% |  2.09%\n",
      " 16 | 00:33:23 | 95% | 75% | 1,000 | -0.79% |  1.50% |  1.96%\n",
      " 17 | 00:35:19 | 75% | 75% |   250 | -0.70% |  1.37% |  2.03%\n",
      "Lookahead:  5 | Train: 756 | Test: 21 | Params:  18\n",
      "  0 | 00:03:56 | 50% | 75% |   250 |  1.97% |  1.78% |  1.93%\n",
      "  1 | 00:07:48 | 50% | 75% |   500 |  2.05% |  1.75% |  1.94%\n",
      "  2 | 00:12:24 | 75% | 75% | 1,000 |  2.00% |  1.78% |  1.91%\n",
      "  3 | 00:16:21 | 50% | 95% | 1,000 |  2.41% |  1.55% |  1.04%\n",
      "  4 | 00:20:16 | 50% | 95% |   250 |  2.08% |  1.36% |  1.54%\n",
      "  5 | 00:25:31 | 95% | 75% |   500 |  2.24% |  1.77% |  2.00%\n",
      "  6 | 00:31:17 | 95% | 95% |   500 |  2.40% |  1.76% |  1.69%\n",
      "  7 | 00:37:03 | 95% | 95% |   250 |  2.37% |  1.72% |  1.50%\n",
      "  8 | 00:41:60 | 75% | 95% | 1,000 |  2.24% |  1.40% |  1.58%\n",
      "  9 | 00:45:48 | 50% | 75% | 1,000 |  2.48% |  1.77% |  1.90%\n",
      " 10 | 00:50:50 | 75% | 95% |   250 |  2.05% |  1.35% |  1.48%\n",
      " 11 | 00:56:34 | 95% | 95% | 1,000 |  2.41% |  1.77% |  1.61%\n",
      " 12 | 01:00:31 | 50% | 95% |   500 |  2.15% |  1.53% |  1.24%\n",
      " 13 | 01:05:44 | 95% | 75% |   250 |  2.16% |  1.76% |  2.04%\n",
      " 14 | 01:10:17 | 75% | 75% |   500 |  1.72% |  1.78% |  2.03%\n",
      " 15 | 01:15:11 | 75% | 95% |   500 |  2.10% |  1.27% |  1.66%\n",
      " 16 | 01:20:28 | 95% | 75% | 1,000 |  2.52% |  1.73% |  2.02%\n",
      " 17 | 01:24:59 | 75% | 75% |   250 |  1.71% |  1.77% |  2.13%\n",
      "Lookahead: 10 | Train:  63 | Test: 21 | Params:  18\n",
      "  0 | 00:01:04 | 50% | 75% |   250 | -1.81% | -0.10% | -1.29%\n",
      "  1 | 00:02:07 | 50% | 75% |   500 | -1.82% |  0.01% | -1.12%\n",
      "  2 | 00:03:13 | 75% | 75% | 1,000 | -1.86% |  0.43% | -0.78%\n",
      "  3 | 00:04:11 | 50% | 95% | 1,000 | -0.94% |  0.34% | -0.61%\n",
      "  4 | 00:05:15 | 50% | 95% |   250 | -2.43% | -0.35% | -0.92%\n",
      "  5 | 00:06:24 | 95% | 75% |   500 | -1.53% |  0.07% | -0.86%\n",
      "  6 | 00:07:33 | 95% | 95% |   500 | -2.47% |  0.02% | -0.52%\n",
      "  7 | 00:08:44 | 95% | 95% |   250 | -2.88% | -0.15% | -0.29%\n",
      "  8 | 00:09:49 | 75% | 95% | 1,000 | -2.40% |  0.27% | -0.14%\n",
      "  9 | 00:10:47 | 50% | 75% | 1,000 | -0.81% |  0.51% | -0.80%\n",
      " 10 | 00:11:54 | 75% | 95% |   250 | -2.38% | -0.18% | -0.47%\n",
      " 11 | 00:13:02 | 95% | 95% | 1,000 | -2.23% |  0.15% | -0.28%\n",
      " 12 | 00:14:05 | 50% | 95% |   500 | -2.16% | -0.17% | -0.56%\n",
      " 13 | 00:15:14 | 95% | 75% |   250 | -1.79% | -0.10% | -0.91%\n",
      " 14 | 00:16:21 | 75% | 75% |   500 | -1.66% | -0.05% | -1.23%\n",
      " 15 | 00:17:27 | 75% | 95% |   500 | -2.53% | -0.10% | -0.64%\n",
      " 16 | 00:18:36 | 95% | 75% | 1,000 | -1.62% |  0.20% | -1.01%\n",
      " 17 | 00:19:42 | 75% | 75% |   250 | -1.77% | -0.09% | -0.96%\n",
      "Lookahead: 10 | Train: 252 | Test: 21 | Params:  18\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "  0 | 00:01:50 | 50% | 75% |   250 | -4.74% |  0.77% |  1.15%\n",
      "  1 | 00:03:37 | 50% | 75% |   500 | -5.90% |  0.64% |  1.03%\n",
      "  2 | 00:05:39 | 75% | 75% | 1,000 | -4.93% |  0.70% |  0.61%\n",
      "  3 | 00:07:27 | 50% | 95% | 1,000 | -5.86% |  0.44% |  0.75%\n",
      "  4 | 00:09:16 | 50% | 95% |   250 | -3.95% |  0.58% |  1.35%\n",
      "  5 | 00:11:26 | 95% | 75% |   500 | -2.57% |  0.95% |  1.07%\n",
      "  6 | 00:13:42 | 95% | 95% |   500 | -2.20% |  0.92% |  1.04%\n",
      "  7 | 00:15:57 | 95% | 95% |   250 | -2.52% |  0.74% |  0.92%\n",
      "  8 | 00:17:60 | 75% | 95% | 1,000 | -4.57% |  0.84% |  1.19%\n",
      "  9 | 00:19:47 | 50% | 75% | 1,000 | -5.78% |  0.54% |  0.52%\n",
      " 10 | 00:21:51 | 75% | 95% |   250 | -2.87% |  0.85% |  1.42%\n",
      " 11 | 00:24:06 | 95% | 95% | 1,000 | -4.38% |  0.91% |  0.98%\n",
      " 12 | 00:25:54 | 50% | 95% |   500 | -6.13% |  0.49% |  1.30%\n",
      " 13 | 00:28:04 | 95% | 75% |   250 | -2.73% |  0.82% |  0.89%\n",
      " 14 | 00:30:04 | 75% | 75% |   500 | -3.82% |  0.77% |  1.03%\n",
      " 15 | 00:32:07 | 75% | 95% |   500 | -2.60% |  0.95% |  1.44%\n",
      " 16 | 00:34:18 | 95% | 75% | 1,000 | -3.76% |  0.88% |  1.23%\n",
      " 17 | 00:36:17 | 75% | 75% |   250 | -3.94% |  0.72% |  1.00%\n",
      "Lookahead: 10 | Train: 756 | Test: 21 | Params:  18\n",
      "  0 | 00:03:47 | 50% | 75% |   250 |  3.11% |  1.63% |  1.15%\n",
      "  1 | 00:07:34 | 50% | 75% |   500 |  2.64% |  1.53% |  0.95%\n",
      "  2 | 00:12:15 | 75% | 75% | 1,000 |  2.34% |  1.40% |  0.86%\n",
      "  3 | 00:16:16 | 50% | 95% | 1,000 |  2.17% |  0.92% |  0.54%\n",
      "  4 | 00:20:17 | 50% | 95% |   250 |  2.84% |  0.92% |  0.63%\n",
      "  5 | 00:25:44 | 95% | 75% |   500 |  2.58% |  1.44% |  0.14%\n",
      "  6 | 00:31:44 | 95% | 95% |   500 |  2.66% |  0.72% | -0.10%\n",
      "  7 | 00:37:41 | 95% | 95% |   250 |  2.66% |  0.80% |  0.02%\n",
      "  8 | 00:42:46 | 75% | 95% | 1,000 |  2.30% |  0.88% |  0.30%\n",
      "  9 | 00:46:33 | 50% | 75% | 1,000 |  2.60% |  1.50% |  1.30%\n",
      " 10 | 00:51:36 | 75% | 95% |   250 |  2.57% |  1.14% |  0.63%\n",
      " 11 | 00:57:30 | 95% | 95% | 1,000 |  2.64% |  0.69% | -0.03%\n",
      " 12 | 01:01:30 | 50% | 95% |   500 |  2.34% |  0.87% |  0.73%\n",
      " 13 | 01:06:56 | 95% | 75% |   250 |  2.57% |  1.44% |  0.17%\n",
      " 14 | 01:11:34 | 75% | 75% |   500 |  2.69% |  1.46% |  0.94%\n",
      " 15 | 01:16:41 | 75% | 95% |   500 |  2.56% |  0.98% |  0.45%\n",
      " 16 | 01:22:26 | 95% | 75% | 1,000 |  2.62% |  1.32% |  0.17%\n",
      " 17 | 01:27:27 | 75% | 75% |   250 |  2.69% |  1.48% |  0.89%\n",
      "Lookahead: 21 | Train:  63 | Test: 21 | Params:  18\n",
      "  0 | 00:01:08 | 50% | 75% |   250 |  0.36% |  2.59% |  1.44%\n",
      "  1 | 00:02:13 | 50% | 75% |   500 |  0.28% |  2.71% |  1.36%\n",
      "  2 | 00:03:23 | 75% | 75% | 1,000 |  5.00% |  2.86% |  1.77%\n",
      "  3 | 00:04:25 | 50% | 95% | 1,000 |  1.51% |  2.59% |  1.61%\n",
      "  4 | 00:05:32 | 50% | 95% |   250 |  0.49% |  2.68% |  1.44%\n",
      "  5 | 00:06:45 | 95% | 75% |   500 | 10.07% |  3.04% |  1.83%\n",
      "  6 | 00:07:57 | 95% | 95% |   500 |  9.87% |  2.87% |  1.82%\n",
      "  7 | 00:09:11 | 95% | 95% |   250 |  9.79% |  3.18% |  2.49%\n",
      "  8 | 00:10:22 | 75% | 95% | 1,000 |  5.32% |  2.76% |  2.13%\n",
      "  9 | 00:11:29 | 50% | 75% | 1,000 |  1.02% |  2.86% |  1.33%\n",
      " 10 | 00:12:46 | 75% | 95% |   250 |  5.13% |  2.99% |  2.18%\n",
      " 11 | 00:14:04 | 95% | 95% | 1,000 | 10.18% |  2.64% |  1.84%\n",
      " 12 | 00:15:14 | 50% | 95% |   500 |  0.47% |  2.80% |  1.54%\n",
      " 13 | 00:16:33 | 95% | 75% |   250 |  9.76% |  3.26% |  2.74%\n",
      " 14 | 00:17:43 | 75% | 75% |   500 |  4.92% |  2.90% |  1.54%\n",
      " 15 | 00:18:52 | 75% | 95% |   500 |  5.12% |  2.87% |  1.78%\n",
      " 16 | 00:20:04 | 95% | 75% | 1,000 | 10.40% |  2.85% |  1.70%\n",
      " 17 | 00:21:14 | 75% | 75% |   250 |  4.68% |  2.94% |  1.84%\n",
      "Lookahead: 21 | Train: 252 | Test: 21 | Params:  18\n",
      "  0 | 00:01:53 | 50% | 75% |   250 | -5.71% |  1.69% |  0.90%\n",
      "  1 | 00:03:43 | 50% | 75% |   500 | -5.67% |  1.67% |  0.87%\n",
      "  2 | 00:05:48 | 75% | 75% | 1,000 | -6.04% |  1.45% |  0.48%\n",
      "  3 | 00:07:40 | 50% | 95% | 1,000 | -6.44% |  1.56% |  1.38%\n",
      "  4 | 00:09:34 | 50% | 95% |   250 | -6.56% |  1.54% |  1.31%\n",
      "  5 | 00:11:51 | 95% | 75% |   500 | -4.51% |  1.45% |  0.32%\n",
      "  6 | 00:14:50 | 95% | 95% |   500 | -5.06% |  1.46% |  0.98%\n",
      "  7 | 00:17:42 | 95% | 95% |   250 | -5.10% |  1.51% |  0.90%\n",
      "  8 | 00:20:22 | 75% | 95% | 1,000 | -6.66% |  1.18% |  0.67%\n",
      "  9 | 00:22:20 | 50% | 75% | 1,000 | -5.50% |  2.03% |  0.89%\n",
      " 10 | 00:24:35 | 75% | 95% |   250 | -6.65% |  1.37% |  0.81%\n",
      " 11 | 00:26:56 | 95% | 95% | 1,000 | -5.06% |  1.32% |  0.61%\n",
      " 12 | 00:28:48 | 50% | 95% |   500 | -6.54% |  1.41% |  1.29%\n",
      " 13 | 00:31:05 | 95% | 75% |   250 | -4.59% |  1.61% |  0.40%\n",
      " 14 | 00:33:10 | 75% | 75% |   500 | -6.18% |  1.50% |  0.80%\n",
      " 15 | 00:35:18 | 75% | 95% |   500 | -6.59% |  1.32% |  0.81%\n",
      " 16 | 00:37:35 | 95% | 75% | 1,000 | -4.68% |  1.23% | -0.01%\n",
      " 17 | 00:39:42 | 75% | 75% |   250 | -6.16% |  1.54% |  0.71%\n",
      "Lookahead: 21 | Train: 756 | Test: 21 | Params:  18\n",
      "  0 | 00:04:01 | 50% | 75% |   250 | -6.84% |  0.77% |  0.48%\n",
      "  1 | 00:07:59 | 50% | 75% |   500 | -6.76% |  1.03% |  0.56%\n",
      "  2 | 00:12:55 | 75% | 75% | 1,000 | -8.84% |  1.10% |  0.81%\n",
      "  3 | 00:17:52 | 50% | 95% | 1,000 | -9.43% |  1.49% |  1.03%\n",
      "  4 | 00:22:09 | 50% | 95% |   250 | -9.59% |  1.11% |  0.75%\n",
      "  5 | 00:27:47 | 95% | 75% |   500 | -10.97% |  1.11% |  0.63%\n",
      "  6 | 00:33:58 | 95% | 95% |   500 | -12.27% |  0.23% | -0.34%\n",
      "  7 | 00:40:10 | 95% | 95% |   250 | -12.25% |  0.23% | -0.34%\n",
      "  8 | 00:45:29 | 75% | 95% | 1,000 | -10.07% |  0.67% |  0.42%\n",
      "  9 | 00:49:28 | 50% | 75% | 1,000 | -6.73% |  1.22% |  0.63%\n",
      " 10 | 00:54:46 | 75% | 95% |   250 | -10.31% |  0.37% |  0.16%\n",
      " 11 | 01:00:59 | 95% | 95% | 1,000 | -12.20% |  0.31% | -0.30%\n",
      " 12 | 01:05:10 | 50% | 95% |   500 | -9.58% |  1.44% |  1.09%\n",
      " 13 | 01:10:51 | 95% | 75% |   250 | -10.96% |  1.10% |  0.46%\n",
      " 14 | 01:15:49 | 75% | 75% |   500 | -8.86% |  0.98% |  0.59%\n",
      " 15 | 01:21:08 | 75% | 95% |   500 | -10.09% |  0.59% |  0.41%\n",
      " 16 | 01:26:46 | 95% | 75% | 1,000 | -10.96% |  1.18% |  0.79%\n",
      " 17 | 01:31:39 | 75% | 75% |   250 | -8.90% |  0.96% |  0.68%\n"
     ]
    }
   ],
   "source": [
    "for lookahead in lookaheads:\n",
    "    for train_length, test_length in test_params_:\n",
    "        n_splits = int(2 * YEAR / test_length)\n",
    "        print(f'Lookahead: {lookahead:2.0f} | Train: {train_length:3.0f} | '\n",
    "              f'Test: {test_length:2.0f} | Params: {len(cv_params_):3.0f}')\n",
    "\n",
    "        cv = MultipleTimeSeriesCV(n_splits=n_splits,\n",
    "                                  test_period_length=test_length,\n",
    "                                  train_period_length=train_length,\n",
    "                                  lookahead=lookahead)\n",
    "\n",
    "        label = label_dict[lookahead]\n",
    "        outcome_data = data.loc[:, features + [label]].dropna()\n",
    "\n",
    "        lgb_data = lgb.Dataset(data=outcome_data.drop(label, axis=1),\n",
    "                               label=outcome_data[label],\n",
    "                               categorical_feature=categoricals,\n",
    "                               free_raw_data=False)\n",
    "        predictions, daily_ic, ic, feature_importance = [], [], [], []\n",
    "        key = f'{lookahead}/{train_length}/{test_length}'\n",
    "        T = 0\n",
    "        for p, (bagging_fraction, feature_fraction, min_data_in_leaf) in enumerate(cv_params_):\n",
    "            params = base_params.copy()\n",
    "            params.update(dict(bagging_fraction=bagging_fraction,\n",
    "                               feature_fraction=feature_fraction,\n",
    "                               min_data_in_leaf=min_data_in_leaf))\n",
    "\n",
    "            start = time()\n",
    "            cv_preds, nrounds = [], []\n",
    "            for i, (train_idx, test_idx) in enumerate(cv.split(X=outcome_data)):\n",
    "                lgb_train = lgb_data.subset(train_idx.tolist()).construct()\n",
    "                lgb_test = lgb_data.subset(test_idx.tolist()).construct()\n",
    "\n",
    "                model = lgb.train(params=params,\n",
    "                                  train_set=lgb_train,\n",
    "                                  num_boost_round=num_boost_round,\n",
    "                                  verbose_eval=False)\n",
    "                if i == 0:\n",
    "                    fi = get_fi(model).to_frame()\n",
    "                else:\n",
    "                    fi[i] = get_fi(model)\n",
    "\n",
    "                test_set = outcome_data.iloc[test_idx, :]\n",
    "                X_test = test_set.loc[:, model.feature_name()]\n",
    "                y_test = test_set.loc[:, label]\n",
    "                y_pred = {str(n): model.predict(X_test, num_iteration=n)\n",
    "                          for n in num_iterations}\n",
    "                cv_preds.append(y_test.to_frame(\n",
    "                    'y_test').assign(**y_pred).assign(i=i))\n",
    "                nrounds.append(model.best_iteration)\n",
    "            feature_importance.append(fi.T.describe().T.assign(bagging_fraction=bagging_fraction,\n",
    "                                                               feature_fraction=feature_fraction,\n",
    "                                                               min_data_in_leaf=min_data_in_leaf))\n",
    "            cv_preds = pd.concat(cv_preds).assign(bagging_fraction=bagging_fraction,\n",
    "                                                  feature_fraction=feature_fraction,\n",
    "                                                  min_data_in_leaf=min_data_in_leaf)\n",
    "\n",
    "            predictions.append(cv_preds)\n",
    "            by_day = cv_preds.groupby(level='date')\n",
    "            ic_by_day = pd.concat([by_day.apply(lambda x: spearmanr(x.y_test,\n",
    "                                                                    x[str(n)])[0]).to_frame(n)\n",
    "                                   for n in num_iterations], axis=1)\n",
    "\n",
    "            daily_ic.append(ic_by_day.assign(bagging_fraction=bagging_fraction,\n",
    "                                             feature_fraction=feature_fraction,\n",
    "                                             min_data_in_leaf=min_data_in_leaf))\n",
    "\n",
    "            cv_ic = [spearmanr(cv_preds.y_test, cv_preds[str(n)])[0]\n",
    "                  for n in num_iterations]\n",
    "\n",
    "            T += time() - start\n",
    "            ic.append([bagging_fraction, feature_fraction,\n",
    "                       min_data_in_leaf, lookahead] + cv_ic)\n",
    "\n",
    "            msg = f'{p:3.0f} | {format_time(T)} | '\n",
    "            msg += f'{bagging_fraction:3.0%} | {feature_fraction:3.0%} | {min_data_in_leaf:5,.0f} | '\n",
    "            msg += f'{max(cv_ic):6.2%} | {ic_by_day.mean().max(): 6.2%} | {ic_by_day.median().max(): 6.2%}'\n",
    "            print(msg)\n",
    "\n",
    "        m = pd.DataFrame(ic, columns=ic_cols)\n",
    "        m.to_hdf(cv_store, 'ic/' + key)\n",
    "        pd.concat(daily_ic).to_hdf(cv_store, 'daily_ic/' + key)\n",
    "        pd.concat(feature_importance).to_hdf(cv_store, 'fi/' + key)\n",
    "        pd.concat(predictions).to_hdf(cv_store, 'predictions/' + key)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Analyse Cross-Validation Results"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Collect Data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We'll now combine the CV results that we stored separately for each fold (to avoid loosing results in case something goes wrong along the way):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T15:52:23.189658Z",
     "start_time": "2020-06-22T15:52:23.187264Z"
    }
   },
   "outputs": [],
   "source": [
    "id_vars = ['train_length',\n",
    "           'test_length',\n",
    "           'bagging_fraction',\n",
    "           'feature_fraction',\n",
    "           'min_data_in_leaf',\n",
    "           't', 'date']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We'll look at the financial performance in the notebook `alphalens_signal_quality`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T15:52:25.964620Z",
     "start_time": "2020-06-22T15:52:24.006439Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1\n",
      "756 21\n",
      "63 21\n",
      "252 21\n",
      "756 21\n",
      "63 21\n",
      "252 21\n",
      "5\n",
      "756 21\n",
      "63 21\n",
      "252 21\n",
      "10\n",
      "756 21\n",
      "63 21\n",
      "252 21\n",
      "21\n",
      "756 21\n",
      "63 21\n",
      "252 21\n"
     ]
    }
   ],
   "source": [
    "daily_ic, ic = [], []\n",
    "for t in lookaheads:\n",
    "    print(t)\n",
    "    with pd.HDFStore(cv_store) as store:\n",
    "        keys = [k[1:] for k in store.keys() if k.startswith(f'/fi/{t}')]\n",
    "        for key in keys:\n",
    "            train_length, test_length = key.split('/')[2:]\n",
    "            print(train_length, test_length)\n",
    "            k = f'{t}/{train_length}/{test_length}'\n",
    "            cols = {'t': t,\n",
    "                    'train_length': int(train_length),\n",
    "                    'test_length': int(test_length)}\n",
    "\n",
    "            ic.append(pd.melt(store['ic/' + k]\n",
    "                              .assign(**cols),\n",
    "                              id_vars=id_vars[:-1],\n",
    "                              value_name='ic',\n",
    "                              var_name='rounds')\n",
    "                      .apply(pd.to_numeric))\n",
    "\n",
    "            df = store['daily_ic/' + k].assign(**cols).reset_index()\n",
    "            daily_ic.append(pd.melt(df,\n",
    "                                    id_vars=id_vars,\n",
    "                                    value_name='daily_ic',\n",
    "                                    var_name='rounds')\n",
    "                            .set_index('date')\n",
    "                            .apply(pd.to_numeric)\n",
    "                            .reset_index())            \n",
    "ic = pd.concat(ic, ignore_index=True)\n",
    "daily_ic = pd.concat(daily_ic, ignore_index=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Predictive Performance: CV Information Coefficient by Day"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We first look at the daily IC, the metric we ultimately care about for a daily trading strategy. The best results for all prediction horizons are typically achieved with three years of training; the shorter horizons work better with 21 day testing period length. More regularization often improves the result but the impact of the bagging and feature fraction parameters are a little less clear cut and likely depend on other parameters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-22T15:55:14.425544Z",
     "start_time": "2020-06-22T15:55:14.148391Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>t</th>\n",
       "      <th>train_length</th>\n",
       "      <th>test_length</th>\n",
       "      <th>bagging_fraction</th>\n",
       "      <th>feature_fraction</th>\n",
       "      <th>min_data_in_leaf</th>\n",
       "      <th>rounds</th>\n",
       "      <th>ic</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>161</th>\n",
       "      <td>1</td>\n",
       "      <td>63</td>\n",
       "      <td>21</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.75</td>\n",
       "      <td>1000</td>\n",
       "      <td>50</td>\n",
       "      <td>0.013466</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>160</th>\n",
       "      <td>1</td>\n",
       "      <td>63</td>\n",
       "      <td>21</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.75</td>\n",
       "      <td>1000</td>\n",
       "      <td>25</td>\n",
       "      <td>0.012966</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>162</th>\n",
       "      <td>1</td>\n",
       "      <td>63</td>\n",
       "      <td>21</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.75</td>\n",
       "      <td>1000</td>\n",
       "      <td>75</td>\n",
       "      <td>0.012946</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1942</th>\n",
       "      <td>5</td>\n",
       "      <td>756</td>\n",
       "      <td>21</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.75</td>\n",
       "      <td>500</td>\n",
       "      <td>75</td>\n",
       "      <td>0.017819</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1962</th>\n",
       "      <td>5</td>\n",
       "      <td>756</td>\n",
       "      <td>21</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.75</td>\n",
       "      <td>1000</td>\n",
       "      <td>75</td>\n",
       "      <td>0.017804</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1805</th>\n",
       "      <td>5</td>\n",
       "      <td>756</td>\n",
       "      <td>21</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.75</td>\n",
       "      <td>250</td>\n",
       "      <td>150</td>\n",
       "      <td>0.017762</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2886</th>\n",
       "      <td>10</td>\n",
       "      <td>756</td>\n",
       "      <td>21</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.75</td>\n",
       "      <td>250</td>\n",
       "      <td>175</td>\n",
       "      <td>0.016297</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2887</th>\n",
       "      <td>10</td>\n",
       "      <td>756</td>\n",
       "      <td>21</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.75</td>\n",
       "      <td>250</td>\n",
       "      <td>200</td>\n",
       "      <td>0.015740</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2906</th>\n",
       "      <td>10</td>\n",
       "      <td>756</td>\n",
       "      <td>21</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.75</td>\n",
       "      <td>500</td>\n",
       "      <td>175</td>\n",
       "      <td>0.015297</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3481</th>\n",
       "      <td>21</td>\n",
       "      <td>63</td>\n",
       "      <td>21</td>\n",
       "      <td>0.95</td>\n",
       "      <td>0.75</td>\n",
       "      <td>250</td>\n",
       "      <td>50</td>\n",
       "      <td>0.032590</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3484</th>\n",
       "      <td>21</td>\n",
       "      <td>63</td>\n",
       "      <td>21</td>\n",
       "      <td>0.95</td>\n",
       "      <td>0.75</td>\n",
       "      <td>250</td>\n",
       "      <td>125</td>\n",
       "      <td>0.032105</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3482</th>\n",
       "      <td>21</td>\n",
       "      <td>63</td>\n",
       "      <td>21</td>\n",
       "      <td>0.95</td>\n",
       "      <td>0.75</td>\n",
       "      <td>250</td>\n",
       "      <td>75</td>\n",
       "      <td>0.031893</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       t  train_length  test_length  bagging_fraction  feature_fraction  \\\n",
       "161    1            63           21              0.75              0.75   \n",
       "160    1            63           21              0.75              0.75   \n",
       "162    1            63           21              0.75              0.75   \n",
       "1942   5           756           21              0.75              0.75   \n",
       "1962   5           756           21              0.75              0.75   \n",
       "1805   5           756           21              0.50              0.75   \n",
       "2886  10           756           21              0.50              0.75   \n",
       "2887  10           756           21              0.50              0.75   \n",
       "2906  10           756           21              0.50              0.75   \n",
       "3481  21            63           21              0.95              0.75   \n",
       "3484  21            63           21              0.95              0.75   \n",
       "3482  21            63           21              0.95              0.75   \n",
       "\n",
       "      min_data_in_leaf  rounds        ic  \n",
       "161               1000      50  0.013466  \n",
       "160               1000      25  0.012966  \n",
       "162               1000      75  0.012946  \n",
       "1942               500      75  0.017819  \n",
       "1962              1000      75  0.017804  \n",
       "1805               250     150  0.017762  \n",
       "2886               250     175  0.016297  \n",
       "2887               250     200  0.015740  \n",
       "2906               500     175  0.015297  \n",
       "3481               250      50  0.032590  \n",
       "3484               250     125  0.032105  \n",
       "3482               250      75  0.031893  "
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "group_cols = ['t','train_length', 'test_length', \n",
    "              'bagging_fraction', 'feature_fraction', 'min_data_in_leaf']\n",
    "daily_ic_avg = daily_ic.groupby(group_cols + ['rounds']).daily_ic.mean().to_frame('ic').reset_index()\n",
    "daily_ic_avg.groupby('t', group_keys=False).apply(lambda x: x.nlargest(3, 'ic'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T13:37:55.827034Z",
     "start_time": "2020-06-20T13:37:55.821458Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 4320 entries, 0 to 4319\n",
      "Data columns (total 8 columns):\n",
      " #   Column            Non-Null Count  Dtype  \n",
      "---  ------            --------------  -----  \n",
      " 0   t                 4320 non-null   int64  \n",
      " 1   train_length      4320 non-null   int64  \n",
      " 2   test_length       4320 non-null   int64  \n",
      " 3   bagging_fraction  4320 non-null   float64\n",
      " 4   feature_fraction  4320 non-null   float64\n",
      " 5   min_data_in_leaf  4320 non-null   int64  \n",
      " 6   rounds            4320 non-null   int64  \n",
      " 7   ic                4320 non-null   float64\n",
      "dtypes: float64(3), int64(5)\n",
      "memory usage: 270.1 KB\n"
     ]
    }
   ],
   "source": [
    "daily_ic_avg.info(null_counts=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For a 1-day forecast horizon, over 75% of the predictions yield a positive daily IC; the same is true for 21 days which, unsurprisingly, also shows a wider range."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T13:37:55.975544Z",
     "start_time": "2020-06-20T13:37:55.828099Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = sns.boxenplot(x='t', y='ic', data=daily_ic_avg)\n",
    "ax.axhline(0, ls='--', lw=1, c='k');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T13:37:56.790436Z",
     "start_time": "2020-06-20T13:37:55.976638Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x360 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "g = sns.catplot(x='t',\n",
    "                y='ic',\n",
    "                col='train_length',\n",
    "                row='test_length',\n",
    "                data=daily_ic_avg[(daily_ic_avg.test_length == 21)],\n",
    "                kind='boxen')\n",
    "g.savefig(results_path / 'daily_ic_test_21', dpi=300);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### HyperParameter Impact: Linear Regression"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To get a better idea of how the various CV parameters impact the forecast quality, we can run a linear regression with the daily IC as outcome and the one-hot encoded hyperparameters as inputs:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T13:37:56.828564Z",
     "start_time": "2020-06-20T13:37:56.791564Z"
    }
   },
   "outputs": [],
   "source": [
    "lin_reg = {}\n",
    "for t in [1, 5]:\n",
    "    df_ = daily_ic_avg[(daily_ic_avg.t==t)&(daily_ic_avg.rounds<=250)].dropna()\n",
    "    y, X = df_.ic, df_.drop(['ic', 't'], axis=1)\n",
    "    X = sm.add_constant(pd.get_dummies(X, columns=X.columns, drop_first=True))\n",
    "    model = sm.OLS(endog=y, exog=X)\n",
    "    lin_reg[t] = model.fit()\n",
    "    s = lin_reg[t].summary()\n",
    "    coefs = pd.read_csv(StringIO(s.tables[1].as_csv())).rename(\n",
    "        columns=lambda x: x.strip())\n",
    "    coefs.columns = ['variable', 'coef', 'std_err',\n",
    "                     't', 'p_value', 'ci_low', 'ci_high']\n",
    "    coefs.to_csv(results_path / f'lr_result_{t:02}.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T13:37:56.840477Z",
     "start_time": "2020-06-20T13:37:56.829569Z"
    }
   },
   "outputs": [],
   "source": [
    "def visualize_lr_result(model, ax):\n",
    "    ci = model.conf_int()\n",
    "    errors = ci[1].sub(ci[0]).div(2)\n",
    "\n",
    "    coefs = (model.params.to_frame('coef').assign(error=errors)\n",
    "             .reset_index().rename(columns={'index': 'variable'}))\n",
    "    coefs = coefs[~coefs['variable'].str.startswith(\n",
    "        'date') & (coefs.variable != 'const')]\n",
    "    coefs.variable = coefs.variable.str.split('_').str[-1]\n",
    "\n",
    "    coefs.plot(x='variable', y='coef', kind='bar', ax=ax, \n",
    "               color='none', capsize=3, yerr='error', legend=False, rot=0)    \n",
    "    ax.set_ylabel('IC')\n",
    "    ax.set_xlabel('')\n",
    "    ax.scatter(x=pd.np.arange(len(coefs)), marker='_', s=120, y=coefs['coef'], color='black')\n",
    "    ax.axhline(y=0, linestyle='--', color='black', linewidth=1)\n",
    "    ax.xaxis.set_ticks_position('none')\n",
    "\n",
    "    ax.annotate('Train\\nLength', xy=(.09, -0.1), xytext=(.09, -0.2),\n",
    "                xycoords='axes fraction',\n",
    "                textcoords='axes fraction',\n",
    "                fontsize=11, ha='center', va='bottom',\n",
    "                bbox=dict(boxstyle='square', fc='white', ec='black'),\n",
    "                arrowprops=dict(arrowstyle='-[, widthB=5, lengthB=0.8', lw=1.0, color='black'))\n",
    "\n",
    "    ax.annotate('Test\\nLength', xy=(.23, -0.1), xytext=(.23, -0.2),\n",
    "                xycoords='axes fraction',\n",
    "                textcoords='axes fraction',\n",
    "                fontsize=11, ha='center', va='bottom',\n",
    "                bbox=dict(boxstyle='square', fc='white', ec='black'),\n",
    "                arrowprops=dict(arrowstyle='-[, widthB=2, lengthB=0.8', lw=1.0, color='black'))\n",
    "\n",
    "    ax.annotate('Bagging\\nFraction', xy=(.32, -0.1), xytext=(.32, -0.2),\n",
    "                xycoords='axes fraction',\n",
    "                textcoords='axes fraction',\n",
    "                fontsize=11, ha='center', va='bottom',\n",
    "                bbox=dict(boxstyle='square', fc='white', ec='black'),\n",
    "                arrowprops=dict(arrowstyle='-[, widthB=2.7, lengthB=0.8', lw=1.0, color='black'))\n",
    "\n",
    "\n",
    "    ax.annotate('Feature\\nFraction', xy=(.44, -0.1), xytext=(.44, -0.2),\n",
    "                xycoords='axes fraction',\n",
    "                textcoords='axes fraction',\n",
    "                fontsize=11, ha='center', va='bottom',\n",
    "                bbox=dict(boxstyle='square', fc='white', ec='black'),\n",
    "                arrowprops=dict(arrowstyle='-[, widthB=3.4, lengthB=1.0', lw=1.0, color='black'))\n",
    "    \n",
    "\n",
    "    ax.annotate('Min.\\nSamples', xy=(.55, -0.1), xytext=(.55, -0.2),\n",
    "                xycoords='axes fraction',\n",
    "                textcoords='axes fraction',\n",
    "                fontsize=11, ha='center', va='bottom',\n",
    "                bbox=dict(boxstyle='square', fc='white', ec='black'),\n",
    "                arrowprops=dict(arrowstyle='-[, widthB=2.5, lengthB=1.0', lw=1.0, color='black'))    \n",
    "    \n",
    "    ax.annotate('Number of\\nRounds', xy=(.8, -0.1), xytext=(.8, -0.2),\n",
    "                xycoords='axes fraction',\n",
    "                textcoords='axes fraction',\n",
    "                fontsize=11, ha='center', va='bottom',\n",
    "                bbox=dict(boxstyle='square', fc='white', ec='black'),\n",
    "                arrowprops=dict(arrowstyle='-[, widthB=11.2, lengthB=1.0', lw=1.0, color='black'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The below plot shows the regression coefficient values and their confidence intervals. The intercept (not shown) has a small positive value and is statistically signifant; it captures the impact of the dropped categories (the smallest value for each parameter).\n",
    "\n",
    "For 1-day forecasts, some but not all results are insightful: 21-day testing is better, and so is `min_samples_leaf` of 500 or 1,000. 100-200 trees seem to work best, but both shorter and longer training periods are better than intermediate values."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T15:48:55.239985Z",
     "start_time": "2020-06-20T15:48:54.749413Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABYMAAAGqCAYAAABZHltuAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdeVxV1f7/8TeDOABp5XBvKQ4kp3JCUEyvOKComWOk4ICldksLHK6VaKYkKGhlA5pZafeGEzlczW6pIXopZzScpRxSM0sjKQH1gGf//vDH/noEFL0KIq/n4+HjwVlr7b0/a58N7sfnrPPZDoZhGAIAAAAAAAAA3NUcSzoAAAAAAAAAAMDtRzIYAAAAAAAAAMoAksEAAAAAAAAAUAaQDAYAAAAAAACAMoBkMAAAAAAAAACUASSDAQAAAAAAAKAMIBkMAACKzeHDhzVx4kR16tRJTZo00WOPPaa+ffvqk08+0blz5wrcJiAgQBaLpcjHyMnJ0aeffqrg4GA1a9ZMjRs3VocOHTRu3DgdPHjwhmPOzs5WQkKCBg4cqNatW6thw4Zq3769IiIi9MMPP9zw/v4Xu3btUt++fdW4cWM1b95cK1asUHp6ul588UX5+vrK29tbkyZNUlxcnCwWixITE2/4GBaLRT179rwN0ed37tw5zZ8//7bse926dXryySfVtGlTdenSRYsXL77pff3666+Ki4tTr1691Lx5czVu3FhPPPGE3nzzTZ09e/YWRn19y5cvV6dOndSwYUO1atVKP/74Y5Hfsz///FMWi0WhoaHFEGnxslgsCggI+J/28cUXX+jEiRO3KKLbKyIiQhaLRQcOHCjpUAAAQCnjXNIBAACAsmHu3Ll66623JEmtWrVSx44dlZ2drZ07dyo2NlZz587VzJkz5e3tfdPHyM7O1jPPPKNdu3apSZMm6tGjhypUqKBjx47p888/18qVKzVlyhT17t27SPs7dOiQwsLCdPToUT300ENq166d3N3ddejQIa1YsUJffPGF3nnnHXXs2PGmYy4qm82msLAwnTlzRr169VLVqlXVoEEDTZkyRYmJiWrZsqUaN26sxo0by93dXWFhYapbt+4NHycsLExVq1a9DTPIr3PnzqpWrZoGDhx4S/ebmJioF198UXXr1lVISIg2bNigSZMmSZJCQkJuaF9ff/21IiIilJmZKT8/PzPpunPnTn300UdasWKFFixYoNq1a9/SORTk8OHDevXVV+Xm5qb+/fvL0dFRDzzwQLG+Z3erN954Qx9//LFWrFhR0qEAAADcViSDAQDAbbdgwQJNnz5dDz30kN5991099NBDdv1ffPGFxo8fr0GDBmnZsmWqX7/+TR1n7ty52rVrl8aNG6dnnnnGru+HH35QSEiIJk2aJH9//+smz37//Xc988wz+v333xUVFaU+ffrIwcHB7E9NTdWQIUM0atQoLVmyRI888shNxVxUv/32m06fPi0fHx/Fxsaa7fv27ZOTk5M+/PBDubi4mO0tWrS4qeOEh4f/z7EWVXp6uqpVq3bL9/vhhx+qXLlyWrhwoe677z49++yzatu2rRYtWnRDyeDt27drxIgRqlKlihISEvJ9UDF//nxFRUVp8ODB+uqrr1S+fPlbPRU7Bw4ckM1mU//+/TV69GizvTjfs7tVenp6SYcAAABQLCgTAQAAbqvTp08rNjZWVapU0bx58/IlgiWpW7duioqK0sWLFzVu3LibPtb69evl7OysAQMG5OurX7++BgwYoIsXL+q///3vdfc1bdo0nTlzRiNGjFDfvn3tEsGS5O3trbFjxyonJ0cffvjhTcdcVFarVZJ077332rXn5OSoUqVKdongsu7UqVMqV66c7rnnHknS/fffL1dXV2VmZhZ5HzabTREREbLZbIWuWB84cKC6deumkydPavny5bcs/sIUdg0AAAAARUUyGAAA3FYJCQmyWq3q37+/atSoUei4nj17ymKxaM+ePdq7d+9NHSs3N1e5ubk6cuRIgf19+/bVrFmz1LJly2vuJzMzU6tXr5arq6sGDRpU6LhevXpp5MiR+ZLPp0+f1sSJE9W2bVs1bNhQbdu21cSJE3X69Ol8+7BarZozZ466du2qRo0aqWXLlhozZoxd7dKIiAh16NBB0uVauHn1US0Wi06ePKlz587JYrGYtZULqxm8fft2Pf/882rRooV8fX0VEhKSb0xB9WeLEqN0uZ6txWLR5s2bNXfuXHXq1EmNGjVSx44dNXv2bF26dEmStHXrVjPWgwcPymKxKC4uTpKUlZWlqVOnqkuXLuaxwsLCtG/fvkLfh6s99thjys7O1qeffipJ+vzzz5WRkXFD5Ty2bNmin376yTxXhRk2bJjGjx+fbyX27t279cILL6hFixZq1KiRunbtqg8++MBM6OYJDQ1VQECAfvnlF40ZM0YtWrRQkyZNNGDAAG3dutUcFxAQYH5QEhMTY3fOCnrPfvrpJ7300ktq1aqVmjZtqrCwMP38888FzsEwDC1atEi9e/c261EPGzZM+/fvtxuX974tX75cS5cuVffu3dWoUSO1adNG06ZN0/nz5/PtOzExUaGhoWrWrJlatGihZ555Rtu3b883bvPmzRo8eLBZ+zo4OFirV68u7LQXicViUUREhHbu3KnQ0FA1bdpUzZs316hRo/TTTz+Z4wICAvTvf/9b0uXf6StrDxf13ORd+1999ZWGDh2qRo0aqX379ho2bJgsFou+/fbbfPGlpqbKYrHo9ddfN9u+//57vfzyy+bfDh8fH4WEhGjNmjXXne+xY8c0cuRItW/fXg0bNlRAQIAiIyN15syZGz53AADg7kUyGAAA3FabNm2SJLVp0+a6YwMDAyXpph58Jkl/+9vfJEmDBw/WBx98kC8pXLNmTXXs2FEPPPDANfezbds2XbhwQT4+PqpUqVKh48qXL68XXnhBzZo1M9uOHz+u3r17KyEhQfXq1dPAgQNVr149JSQk6Mknn7RLoObk5Ojvf/+7ZsyYIVdXVw0cOFD+/v5au3atnnrqKX3//feSpI4dO5pJ6bp16yosLEyDBg1SWFiY3N3d5eLiorCwMIWFhRUa68qVK/X0009r+/btatOmjYKCgnTq1Cm9+OKLWrp0aaHbFTXGK73xxhuaOXOmfH191b9/f124cEHvvPOO5syZI0l68MEHzVirVq2qsLAw+fn5SZJGjRqlf/3rX6pTp46efvpptW3bVsnJyRowYEChSf6rjRw5Uu7u7poxY4bGjx+viIgI+fr6asSIEUXaXpKSk5MlSa1bt77muPr16+vpp59WvXr1zLbExET169dP33zzjVq1aqWQkBA5OTnp7bff1uDBg/MlhLOystS/f38dPHhQvXr1UseOHbVz504NHTpUx48flyQNGjTI/ECgdevWdufsar/88otCQkL0xRdfyNvbW0FBQfrhhx/07LPPFjh+7NixioyMVE5OjkJCQtSlSxelpKQoJCREmzdvzjd+/vz5ioyMVP369RUaGqry5ctr3rx5io6Oths3Z84cvfjiizp8+LA6d+6sJ554Qvv379czzzxjlxxdsmSJBg8erLS0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m5ub2rRpo7CwMNWvX/9/Oj9AWbo3PnHihLKysvTaa6/p1KlTatiwocaOHVukb8FwbwygVDAAoIw6ceKE4e3tXWDfK6+8YkRFRRk2m824ePGiMWTIEGPOnDnG77//brRs2dJITU01DMMwvv/+e8PPz884fvy4sWzZMuO5554zVq1aZTzxxBPGzz//bBiGYXz11VdGVFSUue/XXnvNmDx5smEYhjFw4EBj+PDhRm5urpGdnW387W9/M7Zv325kZGQYnTp1Mk6cOGEYhmH88ssvRps2bYyTJ09ec389e/Y0PvvsM8MwDCMlJcWwWCzGloErXNwAACAASURBVC1binxOBg4caHz11VcF9m3ZssV44okn8rWvX7/e6Nq1q2EYhjF69GjzeJmZmUaLFi2MPXv2GL/99pvh4+NjnD171jAMw3j55ZeNRYsWGTabzWjRooU5z+3btxtdunQxbDabYRiGMX36dGPHjh3msaKioox33323yPMBgMJcunSppEMAgDsK98aXpaamGi+88ILx888/G7m5ucbkyZON4cOH5xvHvTGA0oqVwQBQgOTkZC1atEgODg5ycXFRSEiI/vWvf8liscjDw8Nc0VS/fn35+Pho27ZtcnBw0J49e/TNN99o/Pjx+utf/ypJ6tKli2rVqqX4+HgdO3ZM27Zts6vH1rVrVzk5OalixYqqU6eO0tPTlZWVpTNnzujFF180xzk4OCgtLa3Q/Z09e1ZpaWnq1auXJMnX17dYVgI5ODiYD7mJjY1VcnKyPvjgAx05ckQXL15Udna27r//frVr104rV65Ur1699O2332rSpEk6e/aszp07p5o1a0q6/MAhJycn9enTR61bt1bnzp3tHiRWs2ZN7dq167bPCcDdz9GRR2cAQFGVpXvjJk2aaNasWebrsLAwtW7dWlartUgP/+TeGMCdjmQwABTAZrPZPVncZrMpNzdXly5dyvfEccMwlJubq3Llysnd3V1vvfWWRo0apXbt2qlmzZpauHChPvvsMw0YMEDdu3dXlSpV9NNPP5nbX/n1VwcHBxmGoUuXLsnT01NLliwx+3799Vfdd999192fccVDl4rjq7V79uwxnxo/cOBAWSwW+fv76/HHH9euXbvMePJqqDo7O6tTp05ydXWV1WqVYRiy2WxydHTUPffco5UrV2rnzp3asmWLRo0apaFDh2rAgAHm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\n",
      "text/plain": [
       "<Figure size 1440x432 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "with sns.axes_style('white'):\n",
    "    fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 6))\n",
    "    axes = axes.flatten()\n",
    "    for i, t in enumerate([1, 5]):\n",
    "        visualize_lr_result(lin_reg[t], axes[i])\n",
    "        axes[i].set_title(f'Lookahead: {t} Day(s)')\n",
    "    fig.suptitle('OLS Coefficients & Confidence Intervals', fontsize=20)\n",
    "    fig.tight_layout()\n",
    "    fig.subplots_adjust(top=.92)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Information Coefficient: Overall"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We'll also take a look at the overall IC value, which is often reported but does not necessarily match the goal of a daily trading strategy that uses the model return predictions as well as the daily IC."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T13:37:57.378536Z",
     "start_time": "2020-06-20T13:37:57.373436Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 5400 entries, 0 to 5399\n",
      "Data columns (total 8 columns):\n",
      " #   Column            Non-Null Count  Dtype  \n",
      "---  ------            --------------  -----  \n",
      " 0   train_length      5400 non-null   int64  \n",
      " 1   test_length       5400 non-null   int64  \n",
      " 2   bagging_fraction  5400 non-null   float64\n",
      " 3   feature_fraction  5400 non-null   float64\n",
      " 4   min_data_in_leaf  5400 non-null   int64  \n",
      " 5   t                 5400 non-null   int64  \n",
      " 6   rounds            5400 non-null   int64  \n",
      " 7   ic                5400 non-null   float64\n",
      "dtypes: float64(3), int64(5)\n",
      "memory usage: 337.6 KB\n"
     ]
    }
   ],
   "source": [
    "ic.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Best Parameters"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Directionally, and for shorter periods, similar hyperparameter settings work best (while the IC values are higher):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T13:37:57.399122Z",
     "start_time": "2020-06-20T13:37:57.379375Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>train_length</th>\n",
       "      <th>test_length</th>\n",
       "      <th>bagging_fraction</th>\n",
       "      <th>feature_fraction</th>\n",
       "      <th>min_data_in_leaf</th>\n",
       "      <th>t</th>\n",
       "      <th>rounds</th>\n",
       "      <th>ic</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>t</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">1</th>\n",
       "      <th>1051</th>\n",
       "      <td>252</td>\n",
       "      <td>21</td>\n",
       "      <td>0.95</td>\n",
       "      <td>0.95</td>\n",
       "      <td>250</td>\n",
       "      <td>1</td>\n",
       "      <td>475</td>\n",
       "      <td>0.034049</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2131</th>\n",
       "      <td>252</td>\n",
       "      <td>21</td>\n",
       "      <td>0.95</td>\n",
       "      <td>0.95</td>\n",
       "      <td>250</td>\n",
       "      <td>1</td>\n",
       "      <td>475</td>\n",
       "      <td>0.034049</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>979</th>\n",
       "      <td>252</td>\n",
       "      <td>21</td>\n",
       "      <td>0.95</td>\n",
       "      <td>0.95</td>\n",
       "      <td>250</td>\n",
       "      <td>1</td>\n",
       "      <td>375</td>\n",
       "      <td>0.034045</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">5</th>\n",
       "      <th>2194</th>\n",
       "      <td>756</td>\n",
       "      <td>21</td>\n",
       "      <td>0.95</td>\n",
       "      <td>0.75</td>\n",
       "      <td>1000</td>\n",
       "      <td>5</td>\n",
       "      <td>50</td>\n",
       "      <td>0.025161</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2421</th>\n",
       "      <td>756</td>\n",
       "      <td>21</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.75</td>\n",
       "      <td>1000</td>\n",
       "      <td>5</td>\n",
       "      <td>375</td>\n",
       "      <td>0.024792</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2295</th>\n",
       "      <td>756</td>\n",
       "      <td>21</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.75</td>\n",
       "      <td>1000</td>\n",
       "      <td>5</td>\n",
       "      <td>200</td>\n",
       "      <td>0.024420</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">10</th>\n",
       "      <th>3258</th>\n",
       "      <td>756</td>\n",
       "      <td>21</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.75</td>\n",
       "      <td>250</td>\n",
       "      <td>10</td>\n",
       "      <td>50</td>\n",
       "      <td>0.031098</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3240</th>\n",
       "      <td>756</td>\n",
       "      <td>21</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.75</td>\n",
       "      <td>250</td>\n",
       "      <td>10</td>\n",
       "      <td>25</td>\n",
       "      <td>0.031094</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3370</th>\n",
       "      <td>756</td>\n",
       "      <td>21</td>\n",
       "      <td>0.50</td>\n",
       "      <td>0.95</td>\n",
       "      <td>250</td>\n",
       "      <td>10</td>\n",
       "      <td>200</td>\n",
       "      <td>0.028374</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">21</th>\n",
       "      <th>4696</th>\n",
       "      <td>63</td>\n",
       "      <td>21</td>\n",
       "      <td>0.95</td>\n",
       "      <td>0.75</td>\n",
       "      <td>1000</td>\n",
       "      <td>21</td>\n",
       "      <td>25</td>\n",
       "      <td>0.104042</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4691</th>\n",
       "      <td>63</td>\n",
       "      <td>21</td>\n",
       "      <td>0.95</td>\n",
       "      <td>0.95</td>\n",
       "      <td>1000</td>\n",
       "      <td>21</td>\n",
       "      <td>25</td>\n",
       "      <td>0.101774</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4727</th>\n",
       "      <td>63</td>\n",
       "      <td>21</td>\n",
       "      <td>0.95</td>\n",
       "      <td>0.95</td>\n",
       "      <td>1000</td>\n",
       "      <td>21</td>\n",
       "      <td>75</td>\n",
       "      <td>0.101336</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         train_length  test_length  bagging_fraction  feature_fraction  \\\n",
       "t                                                                        \n",
       "1  1051           252           21              0.95              0.95   \n",
       "   2131           252           21              0.95              0.95   \n",
       "   979            252           21              0.95              0.95   \n",
       "5  2194           756           21              0.95              0.75   \n",
       "   2421           756           21              0.50              0.75   \n",
       "   2295           756           21              0.50              0.75   \n",
       "10 3258           756           21              0.50              0.75   \n",
       "   3240           756           21              0.50              0.75   \n",
       "   3370           756           21              0.50              0.95   \n",
       "21 4696            63           21              0.95              0.75   \n",
       "   4691            63           21              0.95              0.95   \n",
       "   4727            63           21              0.95              0.95   \n",
       "\n",
       "         min_data_in_leaf   t  rounds        ic  \n",
       "t                                                \n",
       "1  1051               250   1     475  0.034049  \n",
       "   2131               250   1     475  0.034049  \n",
       "   979                250   1     375  0.034045  \n",
       "5  2194              1000   5      50  0.025161  \n",
       "   2421              1000   5     375  0.024792  \n",
       "   2295              1000   5     200  0.024420  \n",
       "10 3258               250  10      50  0.031098  \n",
       "   3240               250  10      25  0.031094  \n",
       "   3370               250  10     200  0.028374  \n",
       "21 4696              1000  21      25  0.104042  \n",
       "   4691              1000  21      25  0.101774  \n",
       "   4727              1000  21      75  0.101336  "
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ic.groupby('t').apply(lambda x: x.nlargest(3, 'ic'))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Visualiztion"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T13:37:57.764825Z",
     "start_time": "2020-06-20T13:37:57.399963Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABDAAAAFgCAYAAABNIolGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO3df3iddX038HdD2tJf0Cutlwiz/GioVre6Ag+657lALENDL7eh2EI7Kgr6MHwkCj5YxgpDBkXG5GJBUIY/VjspUOCaP67SyXTQTcdzWQQZUKTpbPkls22oNg1N0uZ+/sBmFkpJ2pOc+ySv1z/tyX3yPe+cNp8k73zv+4woiqIIAAAAQInVVTsAAAAAwOtRYAAAAAClp8AAAAAASk+BAQAAAJSeAgMAAAAoPQUGAAAAUHoKDPqls7Mzy5cv7/f7/fjHP86TTz75msfvueee/M3f/M3+ROv12xlvvPHGLFu2bL/We/755/ORj3wkCxYsyFlnnZX//M//7D320ksv5cwzz8y6dete9X733HNP7rnnntfM1hf33HNPvv/97/c78//6X/+r3+/zWu67777813/9V5599tnMnTt3v9e75557MmfOnHzwgx/MTTfdlCTZuHFjzj777MyfPz+f+tSn8tJLL+3340CZmaVm6f669tprc8YZZ+T000/PnXfemSTZsmVL3vnOd2bBggVZsGBBlixZkiT57ne/mzlz5uTMM8/M5Zdfnp6env1+fCgTM9VM3R+rVq3qnZtnnXVWpk+fnnXr1r3mTH300Uczf/78zJs3L83Nzens7KzEh0QfKTDol40bN+7TF4i77747v/zlLwcg0avta8bX8rd/+7c566yzsnTp0px33nm5/vrrkyT/8R//kT/90z/NM888M2DZPvjBD+bkk0/ud+ZK+sY3vpH29vaKrPX0009n2bJlWbp0ae666650d3enu7s7f/d3f5cPfOADue2229LY2Jg77rijIo8HZWWWmqX748EHH8zTTz+dO+64I8uWLcutt96aX/3qV3niiSfy/ve/P0uXLs3SpUtz9tlnZ/v27bnhhhvyjW98I7fffnva29vzL//yLxXJAWVhppqp++PEE0/snZsnnXRSPv7xj2fq1Kl7nKlFUeSyyy7LNddck2XLluWEE07Ic889V5Ec9E19tQNQW7785S+ntbU1X/ziF3P22WfnL/7iL/Liiy8mSRYtWpS3vOUtueSSS/L000+ns7Mz5557bqZMmZJ//dd/zeOPP57GxsYceuihe32MpUuX5rvf/W5GjBiR2bNn58Mf/nAuueSSjBo1Ks8991x++ctf5vOf/3ze/va3Z/ny5fnmN7+Zgw8+OCNHjszs2bPzk5/8pDdjknz/+9/PypUrs2XLlnzqU5/KrFmzeh9r9erV+du//dvdHv8jH/nIbkN54cKFmTBhQpJk586dGT16dJKkq6srN910Uz772c/u0/NXFEUefvjhdHR05Oqrr84//uM/5rHHHsu2bdsyderUXHPNNbnxxhszefLkHHXUUbn11lszcuTIPPvss5k9e3bOP//81328n/3sZ7nqqquSJBMnTszixYvzxBNP7HGtDRs25JJLLkl9fX0OO+ywPPfcczn33HOzZs2aLFy4MNddd13a2tryiU98Ihs3bsxb3vKW3rV3Oe+889LR0dF7e+rUqbniiit6b//oRz/K7/7u72bhwoXZuHFj/uzP/iwjR47MpZdemqIo0tPTk1/84hc54ogj+vycQi0yS83S/ZmlM2fOzPTp03tv79y5M/X19Xnsscfy+OOP56yzzkpDQ0MWLVqUyZMn5/bbb8+YMWOSJDt27Oh97mGoMFPN1P2Zqbu88MIL+da3vpW77747SfY4U9vb2zNx4sQsWbIkTz31VN797nfnqKOO6vNzTQUU0A/PPPNMMWfOnKIoiuKv//qvi29+85tFURTFz3/+8+LMM88stm7dWpx00knF5s2bi82bNxff/va3i6IoioULFxYPPPDAa6579913F9ddd12xdu3a4swzzyx27NhR7Ny5s1iwYEGxbt26YuHChcWXvvSloiiK4o477iguu+yyYvPmzcV73/veoqOjo9ixY0cxf/784u67794tY0tLS3HppZcWRVEUDz74YPGxj31snz/2devWFU1NTcW6det2e/tZZ51VtLa27vFjuvvuu3d72yuz/dVf/VVRFEWxdevW4u/+7u+KoiiKnTt3Fk1NTcULL7xQtLS0FLfddlvx4IMPFqeeemrR3d1dbNu2rTjmmGP2mvV//s//WRRFUcyZM6dYu3ZtURRFceeddxbXX3/9a671iU98orj//vuLonj5OT7rrLN2+/ieeeaZ4p3vfGexZcuWYufOncWsWbOKTZs29f0JLIri5ptvLt7//vcXW7duLTZt2lSccsopxa9+9auiKIqiq6urOPXUU4tZs2YVzz77bL/WhVpjlpql+zNLd+nq6iouvPDC4stf/nJRFEVx3333FT/84Q+LoiiKb33rW8UFF1yw2/2/8Y1vFOeee27R09OzT48HZWWmmqmVmKmLFy8u7rrrrt7be5qpq1evLn7v936vWLt2bdHV1VWcc845xY9+9KN9ejz2jR0Y7LOnnnoqDz74YO69994kya9//euMHz8+l112WS677LK0t7fnj//4j/u95q5z+pLkV7/6VZ5++ukk6f1t0yGHHJKf/OQnefrppzN16tTe3yrNnDlzj2u+/e1vT5JMnjw527dv3+1YXxru5OXtup/73Ofy13/91xVtWY888sgkyejRo9PW1paLLrooY8eOTUdHR7q7u3e777Rp01JfX5/6+voceOCBfVp/3bp1+dznPpck6e7u7n28Pa21bt263ufw2GOPzXe+851XrffmN785Bx98cJJk0qRJr7pWxes13BMnTszxxx+f8ePHZ/z48Zk6dWrWr1+fGTNmZOTIkVmxYkV+9KMfZeHChfmHf/iHPn2MUOvM0v033GZp8vK/aXNzc44//vicd955SZJ3vetdvf+Op5xySlpaWpIkPT09ue666/Lzn/88N954Y0aMGNGnjxtqkZm6/4bjTO3p6cn999+fCy+8sPdte5qpEydOzOGHH57GxsYkyQknnJDHHnssf/AHf9Cnj539p8CgX+rq6nov/nXUUUflj//4j/NHf/RH2bx5c5YvX55f/vKXefzxx3PTTTels7Mz7373u/Mnf/InGTFiRIqieN31jzrqqDQ2NuYrX/lKRowYkb//+7/PtGnTsnLlyld9wzVlypT853/+Z7Zv355Ro0bl0UcfzVFHHbVbxiR7/UbtuOOOy9KlS/ea6cEHH8zVV1+dr3zlKznssMNe92PYm1dmq6t7+TI0q1atyi9+8YvccMMNaWtry3333feq52tfvuE88sgjc+211+bQQw/NQw89lI0bN77mWtOmTcvDDz+cd7/73fnpT3+62+PuyvJ6GW655Za9Hj/mmGNy2223pbOzMzt37sy6desyZcqUXHHFFWlqasq73vWujBs3zjfXDHlmqVm6N683S7dv356PfOQj+ehHP7rbD2KLFi3Ke9/73syePTv//u//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\n",
      "text/plain": [
       "<Figure size 1080x360 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "g = sns.catplot(x='t',\n",
    "                y='ic',\n",
    "                col='train_length',\n",
    "                row='test_length',\n",
    "                data=ic[(ic.test_length == 21) & (ic.t < 21)],\n",
    "                kind='box')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T15:25:12.093263Z",
     "start_time": "2020-06-20T15:25:05.499589Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxoAAAQwCAYAAABi0CiMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOzdd3hUZfr/8fdk0juQ0EkgoYXeBBEBaYuggEoTEBUQlZ+rIhawoKygsBb8KiCrWNaKYe1gQ7oUgQChhNACBEIogZCQ3ub8/jgyYUhoMimQz+u6uMx55pT7TMYnc5+nWQzDMBAREREREXEil7IOQERERERErj9KNERERERExOmUaIiIiIiIiNMp0RAREREREadToiEiIiIiIk6nRENERERERJxOicZ16p///OdVHR8XF8fIkSMvus/nn39+xedNSkpiypQpV3zcpEmTWLVq1RUf98wzzzBkyBDi4uKu6LhFixYxePBg7r77bl588UVsNhsAd9xxByNHjmTkyJE8++yzAMTHxzNs2DCGDx/OSy+9ZN/3rISEBCZNmlTkGm+99RZ33XUX69evv6LYIiMjycvLu6JjLtffjelcZz8Xq1atIjIy0lmhFSs7O5tHH32U4cOHM3bsWJKTkx1ej42Ntf++Ro4cSfPmzVm1ahWGYdC5c2d7+ZtvvlmicUr5obrRpLrxylxvdSPA+++/z4ABAxgxYgTLly8HUN0ozmeIFGPfvn3GPffcc9F9brrpplKKxjAmTpxorFy58oqP69ix4xUfk5WVZfTo0cPIzMw0DMMwnnjiCWPJkiVGdna2MWDAgCL7P/TQQ8aff/5pGIZhTJ482Vi8eLHD64cPHzYmTpxY5LiePXsaaWlpVxxft27djOzs7Cs+7nL83ZjOVZqfi48++sh45513DMMwjEWLFhlTp0694L4///yzMWHCBMMwDOPgwYPGQw89VCoxyvVFdaPqxr+rPNWNu3btMvr162dkZ2cb2dnZxh133GFkZmaqbhSncy3rREeu3Lfffsvy5cvJzs4mKSmJe++9l6VLl7J3716eeeYZevbsSadOnVizZg0jR46kcePG7N27l/T0dN5++21q1apV7HlPnDjBU089hWEYBAcH28t//fVXvvjiC/v222+/TWRkJKmpqUyZMoWnnnqK559/nrS0NE6fPs3gwYMZPnx4sddISEhgwoQJLFiwgH79+tG+fXt2796NxWLh3Xffxc/P76L3npeXx0svvUR8fDw2m43x48fToUOHYmN85513OHPmDOPGjWPu3Ln219566y02b97scN4PP/wQd3d3ANzd3fnqq6/w8vICID8/Hw8PD3bt2kVWVhajR48mPz+fCRMm0KpVK2JiYmjfvj0AXbp0Yc2aNfTq1eui9zF79myOHTvGQw89xIcffsicOXPYuHEjhmFw//3306dPHzZs2MDs2bMB8+nUv//9b6KiokhKSuKJJ57gvvvu46uvvuKtt94CsP/OJ02aREpKCikpKbz33nt88MEHRc59qZgefPBBZs+ejZubG0OGDMHT07PI+xsYGMi0adPYtm0beXl5PProo+zdu9f+uWjRogX79+/nqaee4qOPPuKnn37C1dWVdu3a8fTTTzNr1iwSEhI4deoUiYmJPPvss3Tu3Nl+jfj4eF544QWHGG+//XaGDh1q3960aRMPPPCA/b1/9913i723zMxMZs2aZX+iGBMTw/Hjxxk5ciSenp48++yzhIWFXfR3JuWf6kbVjaobTZeqG+Pi4mjfvj0eHh4AhIaGsnv3bhITE1U3inOVZZYjf88333xjjBo1yjAM80nFoEGDDJvNZqxbt84YN26cYRiFT07uuece48cffzQMwzBmzpxpvPfeexc874wZM4zIyEjDMAzjp59+sj+1mzt3rv0J1uTJk40ffvjB4Ro7duwwfvvtN8MwDOPYsWNGr169LniNw4cPG4MHDzYMw3z6tGnTJsMwDGPChAnGokWLLnjc2ad2X3zxhfHaa68ZhmEYycnJRt++fS8rxr/r008/NcaMGWPYbDZj165dRmRkpGGz2Yz9+/cbPXr0MPLy8oxOnTrZ91+7dq3x5JNPFrnn4p7anX36tmLFCmP8+PGGYRhGdna20b9/fyM1NdX4/PPPjWPHjtnv791333U47s8//7Qfd+69Tpw40fj4448NwzAueO4LOffc/fr1s5cX9/4uXrzYfu4TJ04YM2fOdIjjm2++MV5//XVj165dxqBBg4zc3FzDZrMZjzzyiLFs2TLjnXfeMV544QXDMAxj9erVxujRoy/8i7iA++67z9i3b59hGIZRUFBgdO7cudj9PvnkE+Ptt9+2b2/YsMH4+eefDcMwjI0bNxp33XXXFV9byh/VjaobVTeaLlU37tu3zxgwYICRlpZmJCcnG126dDHWrl2rulGcTi0a16iIiAgA/Pz8CA8Px2KxEBAQQE5OTpF9mzRpAkD16tU5efLkBc+5d+9eBgwYAECbNm2YP38+AFWqVGHixIn4+Piwf/9+WrVq5XBcUFAQn3zyCYsXL8bX15f8/PzLvo+zsdWoUaPY2M+3Z88eNm3axLZt2wDzidrp06cvGeO5LvXUDsBms/H6669z4MABZs2ahcVioV69eoSGhtp/DgwMJCkpCReXwqFOGRkZ+Pv7X/b9n72nmJgYe7/v/Px8EhMTqVatGq+88gre3t4cP36cNm3aXPQ8hmHYf65Xr95Fz305MZ49BxT/GThw4ID9fQ4ODuaJJ54o9jz79++nZcuWuLm5AdCuXTv27t0LFH6Oq1evTm5ursNxl/PUztfXl4yMDODi7/3ChQt555137NvNmjXDarXa4zl+/DiGYWCxWC7xrkh5p7pRdeP5VDcWfe/Dw8MZMWIEY8eOJTQ0lJYtW1KpUiVCQ0NVN4pTKdG4RpXE//RhYWFs2bKFxo0bs337dgDS0tJ45513WLFiBQCjRo2yV9pn//vRRx/RqlUrhg8fzp9//snKlSsv+5pXeh9hYWFUr16dhx9+mOzsbObOnYurq+sFYyzOhSr9c7344ou4u7vz7rvv2v9Yfv311+zZs4cpU6Zw/Phx0tPTCQ4OpkmTJqxfv54OHTqwatUqbrzxxiu+pw4dOjB16lRsNhvvvvsutWvX5v7772fJkiX4+voyceJE+z1ZLBZsNhseHh4kJSUBcOTIEVJTU+3nPPu+Xujcl+PsfV/oMxAWFsavv/5q32f8+PF8+OGHRd77sLAwPv74Y/Lz87FarWzcuJE77riDXbt2XfT3HxoaymeffXbRGNu0acPKlStp0aIFq1atom3btkX2SUtLIzc3lxo1atjLZs+eTWBgIGPHjmXXrl3UrFlTf0ivE6obVTeqbrx03ZicnMzp06eZP38+aWlpjB49mgYNGjBz5kzVjeJUSjTE7vHHH+eJJ57g559/tle4vr6+tGnThjvvvBNvb2/8/f05ceIEYD4Reeqppxg0aBBTpkxh4cKFBAYGYrVayc3NdXgK5ix33303L7zwAvfccw/p6ekMHz78ojH+HTExMXz99de0a9eO++67D4B7772XQYMG8eyzzzJs2DAsFguvvvoqrq6uTJw4kcmTJzNz5kzCwsLo3bv3FV2ve/fubNiwgeHDh5OZmUnPnj3x9fVlwIABDBkyBH9/f4KCguz31K5dOx588EE++ugj/Pz8GDx4MOHh4cX+kbzQua/Ehd7fu+66i3Xr1jFs2DAKCgp45JFHgMLPxU033QRAo0aN6NOnD8OGDcNms9G2bVt69uzJrl27riiO4gwbNoyJEycybNgw3Nzc7DOkfPzxx4SEhNCjRw8OHDhQpO/9gw8+yNNPP83KlSuxWq1Mnz79qmOR65fqRpPqRkfXct3YvXt3EhISGDhwIG5ubjzzzDNYrVbVjeJ0FuNijzdE5KolJCQwe/ZsZsyYUdahiIiUG6obRa5/atGogP75z386NCWD+WTm3NlHrlZkZCSLFi0qUj5hwgRat25d7DG5ubmMGTOmSHm9evV4+eWXnRZbRfd3fjciFYHqxopNdaOI86lFQ0REREREnE4rg4uIiIiIiNMp0RAREREREaerMInG2bmpRUSkkOpGEREpKRUm0biShZJERCoK1Y0iIlJSKkyiISIiIiIipUeJhoiIiIiIOJ0SDRERERERcTolGiIiIiIi4nRKNERERERExOmUaIiIiIiIiNMp0RAREREREadToiEiIiIiIk6nRENERERERJxOiYaIiIiIiDidEg0REREREXE6JRoiIiIiIuJ0SjRERERERMTplGiIiIiIiIjTKdEQERERERGnU6IhIiIiIiJOp0RDREREREScTomGiIiIiIg4nRINERERERFxOiUaIiIiIiLidEo0RERERETE6ZRoiIiIiIiI0ynREBERERERp1OiISIiIiIiTqdEQ0REREREnE6JhoiIiIiIOJ0SDRERERERcTolGiIiIiIi4nRKNERERERExOmUaIiIiIiIiNMp0RAREREREadToiEiIiIiIk6nRENKTfypDE6m5ziUJaZkkZiSVUYRiYiIiEhJcS3rAOT6l56Tz9hPoli3/xRWFwtjO4fxdO9GPBEZzY9bEwEY0KomM4e0wupiKeNoRURERMQZlGhIift03UHW7T8FQIHN4D8r4wj0drMnGQA/RCdya9Pq9Gleo4yiFBERERFnUtcpKXEHT2YUKduZeKZI2YFTRfcTERERkWtTqSUaNpuNF198kaFDhzJy5Eji4+MdXl+2bBkDBw5k6NChLFiwAIC8vDyefvpp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vEWLFjz//PMea1tD92v+bUQaAt0bGzbdG0U8Tz0aIiIiIiLicVoZXEREREREPE6JhoiIiIiIeFyDSTRO1qYWEZFKujeKiEh1aTCJxoUslCQi0lDo3igiItWlwSQaIiIiIiJSc5RoiIiIiIiIxynREBERERERj1OiISIiIiIiHqdEQ0REREREPE6JhoiIiIiIeJwSDRERERER8TglGiIiIiIi4nFKNERERERExOOUaIiIiIiIiMcp0RAREREREY9ToiEiIiIiIh6nRENERERERDxOiYaIiIiIiHicEg0REREREfE4JRoiIiIiIuJxSjRERERERMTjlGiIiIiIiIjHKdEQERERERGPU6IhIiIiIiIep0RDREREREQ8TomGiIiIiIh4nBINERERERHxOCUaIiIiIiLicUo0RERERETE45RoiIiIiIiIxynREBERERERj1OiISIiIiIiHqdEQ0REREREPE6JhoiIiIiIeJwSDRERERER8TglGiIiIiIi4nFKNERERERExOOUaIiIiIiIiMcp0RAREREREY+z1tSJ7HY7kydPZvv27Xh7ezN16lTi4+Odr3///ffMmDEDq9XKyJEjGT16NGVlZTz99NOkp6djs9m49957GTRoEFu2bGHixIk0b94cgLFjxzJs2LCauhQRERERETmHGks0Fi1ahM1mY968eWzYsIHp06czc+ZMAMrKynjhhReYP38+fn5+jB07lgEDBrBs2TJCQ0N56aWXyM3NZcSIEQwaNIitW7cyfvx47rzzzppqvoiIiIiIXIAaSzTWrVtH3759AUhOTmbz5s3O19LS0oiLiyMkJASArl27snbtWq688kqGDh3q3M9isQCwefNm9uzZw+LFi4mPj+fpp58mMDCwpi5FfoUKu4P1+3MJ8fOiVXSQM55y4BgAnZqF1lbTpJ6y2x28/O125q87SKNAHyZd2ZrLW0cxe/ke/r18D95WM/cNaMmNXZvWdlNFRETqpRpLNAoLC12SAYvFQnl5OVarlcLCQoKCKh8+AwICKCwsJCAgwHnsgw8+yMMPPwxAx44dGTVqFO3bt2fmzJnMmDGDSZMmnfX8paWlpKamVsOVybnklVQw6ZtD7DtWBsCgxEAevDSSPy3KIOVwCQCdGvvy/OAYvC2m2myq1COfb8vnjdXZAGQWlPK7d9byWJ9Ipi3NdO7zxMcp+JZk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xMfHO1///vvvmTFjBlarlZEjRzJ69GjKysp4+umnSU9Px2azce+99zJo0CD27dvHU089hclkIikpiT//+c+YzcqZRERERETqihp7Ol+0aBE2m4158+bx2GOPMX36dOdrZWVlvPDCC8yePZu5c+cyb948srKyWLBgAaGhobz//vvMmjWLKVOmAPDCCy/w8MMP8/777+NwOFi8eHFNXYaIiIiIiJyHGuvRWLduHX379gUgOTmZzZs3O19LS0sjLi6OkJAQALp27cratWu58sorGTp0qHM/i8UCwJYtW+jRowcA/fr1Y8WKFQwZMuSs5y8tLSU1NdWj1yQiUhddSLla3RtFpKFQKe+aV2OJRmFhIYGBgc5ti8VCeXk5VquVwsJCgoKCnK8FBARQWFhIQECA89gHH3yQhx9+GACHw4HJZHLuW1BQcM7z+/j46AdMROQ0ujeKiEh1qbGhU4GBgRQVFTm37XY7Vqu1yteKioqciUdGRga33XYbw4cP59prrzUafcp8jKKiIoKDg2viEkRERERE5DzVWKLRpUsXli1bBsCGDRto1aqV87XExET27dvHsWPHsNlsrF27ls6dO5Odnc2dd97JE088wY033ujc/5JLLmH16tUALFu2jG7dutXUZciv4XDA0hfhlXYwszds/9qIr/sPvNbF+Fo3p1abKCIiIiKeZXI4HI6aONHJqlM7duzA4XAwbdo0tm7dSnFxMTfddJOz6pTD4WDkyJHcfPPNTJ06la+++oqEhATn+8yaNYuMjAyeffZZysrKSEhIYOrUqc75G2eSmpqq4QG1JeVD+Ox3ldsWb7jxPzBvnOt+ExZBs+412jSRhk73RhERqS41lmjUNv0yrUX//T1sMN0hPQAAIABJREFUeM81dskI2PqZa2zgs9Dv8Zprl4jo3igiItVGi09I9YvpdFrABIkD3PdrklwjzRERERGR6qdEQ6pftzsh+WYwW8E3FIa9BF1vhz6PgNXP+OrzKLQcXNstFREREREP0dApqTllJUayYTmlqnK5zfjT6l07bRJp4HRvFBGR6lJj62iI4OXrHlOCISIiIlIvaeiUiEhddHgTfDAOZg2Cn2cZsWMH4JO74c3+sGQ6VJTXbhtFRETOQj0aIiJnsnUB7FoE0e2NeUVWH9jzI2z5DEJiodsE8Av1/HltxfDOcCg+amynrwXvQFj5OhzZ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UlISMTExVV0NEZHLyuXwbDxw8gAr01YSERxB57qdMZlMZBZksiR1CaG+oXRv2P2y+yosV74DJw+w+tBqGldrbP/yO37sWgAAIABJREFUnlmQybIDy6jpV5M/1ftTueOCxq0Yx/x9Za0CD7R4ALOHmU+3fWqP9WzYk6ndp1bsTVSBI3lHGLtyLJuPbqZeYD1e7fQqLcJbMGHVBJYfWE6obyjj2o3j9sa3uyw/PXE6b294GzASj3dufgerzcrYFWPtg/nHtx/vcg0RgC+2f8H7m9+nyFpEbHgsH/T8gHWH1xG3Jo684jwigiP4oMcH6rZ4mVCiISJyDdOzUeTCnbKcYnridBKPJdKhTgeGXTcMk8kYUL320Fqiw6K5r8V9FTZr1eUgrzgPf7O/w2D5/OJ8fDx9zjlxQ/KJZHYc38GNtW6kbmBdwFjHZeORjTQPa+4wXfPpDuce5tb/3urQajEyZiQ/pPxATlGOPXa1JnlXosu306uIiIjIZcjX7Msj1z/iFB8ePZzh0cOroEaVz9WU0+ebWEWFRjl1zaoXWO+cXd4O5Bxw6hq1O2u3Q5IBsC9733nVQyqexmiIiIiIyGUvtkYsYb5hDrHbIm8jJsyxVfbMxSil6qhFQ0REREQue75mXz695VM+SviIjPwM+jbuy8BmA+lYtyPvbXqPlOwUutbvysOxD1d1VeUPGqMhInIN07NRREQqirpOiYiIiIiI2ynREBERERERt1OiISIiIiIibqdEQ0RERERE3E6JhoiIiIiIuJ0SDRERERERcTslGiIiIiIi4nZKNERERERExO2UaIiIiIiIiNsp0RAREREREbdToiEiIiIiIm6nRENERERERNxOiYaIiIiIiLidEg0REREREXE7JRoiIiIiIuJ2SjRERERERMTtlGiIiIiIiIjbKdEQERERERG3U6IhIiIiIiJup0RDRERERETczlxZFzp16hRjx47l2LFjBAQE8OabbxIWFuZwzOzZs5k5cyZms5n/+7//o3v37uWWW7hwIX//+9+pU6cOAE8++STt27evrNsREREREZGzqLQWjW+//ZaoqCi++eYb7rzzTj766COH/RkZGcyYMYOZM2fy73//mylTplBUVFRuucTERMaOHcuMGTOYMWOGkgwRERERkctIpbVobNy4kQcffBCArl27OiUaW7du5YYbbsDb2xtvb28aNmzIjh07yi2XmJhIUlIS06dPJzY2lr/+9a+YzeXfTmFhIUlJSRV0dyIil4+YmJjzPlbPRhG5VlzIs1Hco0ISje+++47p06c7xKpXr05QUBAAAQEB5OTkOOzPzc217y89Jjc31yF+ernOnTvTq1cv6tevz8svv8zMmTO59957y62Tj4+P/oKJiJxBz0YREakoFZJoDB48mMGDBzvEnnjiCfLy8gDIy8sjODjYYX9gYKB9f+kxQUFBDvHTyw0aNMj+c8+ePfnll18q4lZEREREROQiVNoYjTZt2rBixQoAVq5cSdu2bR32x8bGsnHjRgoLC8nJySElJYWoqCiX5Ww2G3fccQfp6ekArFmzhhYtWlTWrYiIiIiIyDmYbDabrTIuVFBQwHPPPUdGRgZeXl6888471KhRg2nTptGwYUN69uzJ7NmzmTVrFjabjUceeYQ+ffqUW+7XX39l6tSp+Pr60qRJE1544QW8vLzKvX5SUpK6B4iInEHPRhERqSiVlmhUNf1jKiLiTM9GERGpKFqwT0RERERE3E6JhoiIiIiIuJ0SDRERERERcTslGiIiIiIi4nZKNERERERExO2UaIiIiIiIiNtVyMrgl6PCwkKSkpKquhoiIhXObDbTrFmz8zpWz0YRuVZcyLNR3OOaWUdDREREREQqj7pOiYiIiIiI2ynREBERERERt1OiISIiIiIibqdEQ0RERERE3E6JhoiIiIiIuJ0SDRERERERcTslGiIiIiIi4nZKNERERERExO2UaIiIiIiIiNsp0RAREREREbdTonEVeeKJJy6pfEpKCiNHjjzrMV999dUFnzcjI4O4uLgLLjd+/HhWrlx5weXGjRvHkCFDSElJueCyBQUFDBs2zF7WarXy0ksvMXToUEaOHElqaioAqampDB8+nBEjRvDyyy9jtVoBmD17NnfddRdDhgxh2bJlTud///33WbdunUPs5MmTDB06lNGjR19QXbOyspg7d+4F3+P5uNg6ne7QoUMsXboUgDfeeINDhw65q3ouJSQkMHjwYIYNG8YHH3zgtP+TTz5h5MiRjBw5kgEDBtC5c2cAFi5cSK9evez7fvvtt/9n777Do6q2Bg7/ZpJMeiUJSSiBhA6G3ps0QaXopagIfopdURBBFEVRULn2hogNFVDhChaKgnQIxRBqQiAFCCGk954p5/vjwIRxhqapZL3P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Rztei4qK4vDhw5w7d468vDw2b95My5bud3kGGD16NDt2mHsjrF+/nqZNi17eU0REREREyl6ZPdHo3r07a9euZfDgwRiGwbRp01i2bBlZWVkMGjSI8ePHM3r0aAzDoH///lSvXvTa/pMnT2bKlCn4+PhQtWpVPdEQEREREbnOaB8NEZFyTH2jiIiUljIbOiUiIiIiIuWHAg0REREREfE4BRoiIiIiIuJxCjRERERERMTjFGiIiIiIiIjHKdAQERERERGPU6AhIiIiIiIep0BDREREREQ8ToGGiIiIiIh4nAINERERERHxOAUaIiIiIiLicQo0RERERETE4xRoiIiIiIiIxynQEBERERERj1OgISIiIiIiHqdAQ0REREREPE6BhoiIiIiIeJwCDRERERER8TgFGiIiIiIi4nEKNERERERExOMUaIiIiIiIiMcp0BAREREREY9ToCEiIiIiIh6nQENERERERDyuxIFGfn5+adRDRERERET+QIoVaCxevJhp06YBMGbMGJYuXVqqlRIRERERkRtbsQKNBQsW8NRTTwHw7rvvsmDBglKtlIiIiIiI3NiKFWh4eXnh5+cHgNVqxWKxlGqlRERERETkxmYtzkndunVj6NChxMbGkpiYyG233Vba9RIRERERkRvYFZ9ofPrppwBkZWUREBDA6tWr8fPzIyMjo0wqJyIiIiIiN6YrPtGoUaMGAJGRkURGRpZJhURERERE5MZ3xUAjLi4OgLvvvrtMKiMiIiIiIn8M2rBPREREREQ8ToGGiIiIiIh4nAINERERERHxOAUaIiIiIiLicQo0RERERETE48os0LDb7Tz//PMMGjSI4cOHc/jwYafXV61aRf/+/Rk0aBCLFy92em379u0MHz7ccXz48GGGDBnC0KFDmTRpEna7vUzaICIiIiIixVNmgcZ3331HXl4eixYt4qmnnuKll15yvJafn8/06dP58MMPmTdvHosWLSI1NRWAuXPn8txzz5Gbm+s4f/r06TzxxBN88sknGIbB999/X1bNEBERERGRYrjiPhqetGXLFse+HC1atGDXrl2O11JSUggPDyc0NBSA1q1bs3nzZnr37k14eDgzZ87kmWeecZyfmJhI27ZtAYiPj2ft2rV07979iuXn5uaSlJTk6WaJiFx3YmJiin2u+kYRKS9K0jeKZ5RZoJGRkUFQUJDj2Nvb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Iq7UN4qISGnR5hMiIiIiIuJxCjRERERERMTjFGiIiIiIiIjHKdAQERERERGPU6AhIiIiIiIep0BDREREREQ8ToGGiIiIiIh4nAINERERERHxOAUaIiIiIiLicQo0RERERETE4xRoiIiIiIiIxynQEBERERERj1OgISIiIiIiHqdAQ0REREREPE6BhoiIiIiIeJwCDRERERER8TgFGiIiIiIi4nEKNERERERExOMUaIiIiIiIiMcp0BAREREREY9ToCEiIiIiIh6nQENERERERDxOgYaIiIiIiHicAg0REREREfE4BRoiIiIiIuJxCjRERERERMTjFGiIiIiIiIjHKdAQERERERGPU6AhIiIiIiIep0BDREREREQ8ToGGiIiIiIh4nAINERERERHxOAUaIiIiIiLicQo0RERERETE4xRoiIiIiIiIxynQEBERERERj1OgISIiIiIiHmctq4JycnJ4+umnOXPmDIGBgcyYMYPKlSs7nbN48WIWLlyI1WrlwQcfpEuXLkXmW7FiBS+//DI1a9YE4NFHH6Vt27Zl1RwREREREbmCMnuisWDBAqKjo/nkk0+46667mD17ttPrqampzJs3j4ULF/LBBx/w+uuvk5eXV2S+xMREnn76aebNm8e2wig1AAANeklEQVS8efMUZIiIiIiIXEfKLNDYsmULcXFxAMTHx7N+/Xqn13fs2EHLli3x9fUlODiY8PBw9uzZU2S+xMREPvvsM4YOHcpLL71EQUFBWTVFRERERESuolSGTn366af861//ckqrUqUKwcHBAAQGBpKenu70ekZGhuP1i+dkZGQ4pV+a79Zbb6Vbt27UqVOHSZMmsXDhQu69994i65Sbm0tSUpJH2icicj2LiYkp9rnqG0WkvChJ3yieUSqBxoABAxgwYIBT2iOPPEJmZiYAmZmZhISEOL0eFBTkeP3iOcHBwU7pl+br37+/499du3bl22+/vWKd/Pz8dIGJiFxGfaOIiJSWMhs61apVK1avXg1AQkICrVu3dno9NjaWLVu2kJubS3p6OikpKURHR7vNZxgGd955JydOnABg/fr1NG3atKyaIiIiIiIiV2ExDMMoi4Kys7MZN24cqamp+Pj48NprrxEWFsZHH31EeHg4Xbt2ZfHixSxatAjDMBgzZgw9e/YsMt+aNWt488038ff3Jyoqiueeew4fH58iy09KStK3diIil1HfKCIipaXMAo1rTf+Zioi4Ut8oIiKlRRv2iYiIiIiIxynQEBERERERj1OgISIiIiIiHqdAQ0REREREPE6BhoiIiIiIeJwCDRERERER8TgFGiIiIiIi4nHWa12BspKbm0tSUtK1roaISKmzWq00bNiwWOeqbxSR8qIkfaN4RrnZsE9ERERERMqOhk6JiIiIiIjHKdAQERERERGPU6AhIiIiIiIep0BDREREREQ8ToGGiIiIiIh4nAINERERERHxuHKzj8al8vPzmTBhAkePHiUvL48HH3yQGjVqMHbsWCIiIgAYMmQIffr0KfI97rrrLoKDgwGoU6cOY8eOZfz48VgsFho2bMikSZPw8nIfx33++ed88cUXQOEa9gsXLrxq+du3b+fVV19l3rx5HD582G15ixcvZuHChVitVh588EG6dOniNn9SUhJTpkzB29sbX19fZsyYQdWqVZk6dSpbt24lMDAQgNmzZzvaeWn+xMREt/Utbvl//etfOX36NABHjx7lpptu4o033nBbvr+/v8vn1aBBg2K1v2PHji55a9WqVey2uyu7qGvFXdvdXWtff/11sdteoUIFnnvuOQ4ePIi3tzfTp0/HMIxif/Y2m80lf2ZmZrHb76789PT0YrU/Pj7eJe8bb7xR7LZfvO7OnDnDn/70Jz788EOsVmuJr/tL8+fl5ZXour80b05OTomv+Uvz/+Mf/yhR24vbx1yp/JJS36i+UX2j+kb1jeJRRjm0ZMkSY+rUqYZhGEZaWprRqVMnY/HixcYHH3xQrPw5OTlGv379nNLGjBljbNiwwTAMw5g4caKxYsWKYr3X5MmTjYULF161/Pfee8+44447jAEDBhRZ3qlTp4w77rjDyM3NNS5cuOD4t7v8w4YNM3bv3m0YhmEsWLDAmDZtmmEYhjF48GDjzJkzVy3fXX1LUv5F586dM+68807j5MmTRZbv7vMqbvsXLlzokrckbS/utVJU293lL0nbV65caYwfP94wDMPYsGGDMXbs2BJ99u7yl6T97vIXt/3ffPONS96StN0wDCMvL8946KGHjB49ehj79+8v8XV/ef6StP3yvCW95i/PX5K2F7ePuVL5v4X6RvWN6hvVN6pvFE8ql0OnevXqxeOPP+449vb2ZteuXfz3v/9l2LBhTJgwgYyMjCLz79mzh+zsbEaNGsWI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\n",
      "text/plain": [
       "<Figure size 802.75x1080 with 6 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "t = 1\n",
    "train_length = 756\n",
    "test_length = 21\n",
    "g = sns.catplot(x='rounds',\n",
    "    y='ic',\n",
    "    col='feature_fraction',\n",
    "    hue='bagging_fraction',\n",
    "    row='min_data_in_leaf',\n",
    "    data=ic[(ic.t == t) &\n",
    "            (ic.train_length == train_length) &\n",
    "            (ic.test_length == test_length)],\n",
    "    kind='swarm');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Random Forest vs Linear Regression "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's compare the best-performing (in-sample) random forest models to our linear regression baseline:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T15:25:53.361586Z",
     "start_time": "2020-06-20T15:25:53.345988Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 40 entries, 0 to 39\n",
      "Data columns (total 5 columns):\n",
      " #   Column        Non-Null Count  Dtype  \n",
      "---  ------        --------------  -----  \n",
      " 0   lookahead     40 non-null     int64  \n",
      " 1   train_length  40 non-null     int64  \n",
      " 2   test_length   40 non-null     int64  \n",
      " 3   ic_by_day     40 non-null     float64\n",
      " 4   ic            40 non-null     float64\n",
      "dtypes: float64(2), int64(3)\n",
      "memory usage: 1.7 KB\n"
     ]
    }
   ],
   "source": [
    "lr_metrics = pd.read_csv(model_path / 'lin_reg_performance.csv')\n",
    "lr_metrics.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T15:25:55.713387Z",
     "start_time": "2020-06-20T15:25:55.704607Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 4320 entries, 0 to 4319\n",
      "Data columns (total 8 columns):\n",
      " #   Column            Non-Null Count  Dtype  \n",
      "---  ------            --------------  -----  \n",
      " 0   t                 4320 non-null   int64  \n",
      " 1   train_length      4320 non-null   int64  \n",
      " 2   test_length       4320 non-null   int64  \n",
      " 3   bagging_fraction  4320 non-null   float64\n",
      " 4   feature_fraction  4320 non-null   float64\n",
      " 5   min_data_in_leaf  4320 non-null   int64  \n",
      " 6   rounds            4320 non-null   int64  \n",
      " 7   ic                4320 non-null   float64\n",
      "dtypes: float64(3), int64(5)\n",
      "memory usage: 270.1 KB\n"
     ]
    }
   ],
   "source": [
    "daily_ic_avg.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The results are mixed: for the shortest and longest horizons, the random forest outperforms (slightly for 1 day), while linear regression is competitive for the intermediate horizons:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T15:48:28.232579Z",
     "start_time": "2020-06-20T15:48:28.030255Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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Zs2apapVz3wbooMHDyolJUUul0sFBQUaOHCgmjdvro4dO6pevXoKDg7WqFGj9OijjyonJ0eSNHz4cDVu3FhpaWnatm2b8vLylJycrMjISH322Wf64Ycf1LBhQ9WqVcunr/Of2VtQABBga9euVVJSkrKzs1WhQgV17dpVzZs3V2Zmpq688kp16dJFeXl5noKSpFq1amn06NGaP3++5s2bp5SUFM2ePVsffPCBHA6H4uLiJEnz5s1TtWrVNGnSJLlcLsXFxen666+XJEVHR2v48OFKTk5WSEiIXn31VaWmpmr9+vVq1arVSRkXLVqkb7/9VpJUrVo1TZkyRS+99JJatGihe+65R7t371b37t21fPlyHTlyRH369NFll12mSZMm6frrr1diYqJ+++03DR06VDNmzNC6deu0YMECSdKaNWt0xRVX6KabblL79u39Wk4SBQUAp3XiFF9OTo569+6tiIgISVJ4eLi+++47rV27VqGhocrPz/ds06RJE0nSRRddpK+//loZGRlq2LCh532r6OhoSdLWrVvVokULSVJoaKgaNGig7du3S5Iuv/xySVKVKlU874FVqVJFeXl5f8t4qlN8W7duVadOnSRJNWvWVGhoqPbt2ydJns8g/fLLL1q7dq2WLFki6fisKzQ0VCNGjNCIESPkcrl0++23n9Xrd7b8fpl5RESE5s+f7+9hAaDETsx0hg8frqysLC1cuFBhYWF66qmn1Lt3b+Xm5soYI+nvl1LXqVNHv/76q3Jzc1VQUKCffvpJktSgQQN99dVXkiSXy6VffvnFU4Bn68/73r17tw4ePKjw8HBJUoUKx//bj4qKUq9evZSenq5nn31WnTp1UlZWln744Qe98MILevnllzVp0iQdO3ZMDofD8/z8iRkUgHNCrrugeO+1erG/4lxm3rBhQyUlJWnMmDHq37+/Bg8erA0bNuj8889X3bp1lZWVdcrtqlevroEDByohIUHVq1f3fMyma9euGjFihLp37668vDz169dPF1xwQak8twceeEDDhg3TsmXLlJubq9GjRyso6OT/7h988EE9+uijmj9/vlwul/r166caNWpoz549uvPOO1WpUiX17t1bQUFBatq0qSZPnqyIiAg1aNCgVDJ6w2ECUYteiIuL09eNkgMd45xRmgcuYIOffvrJc7oMZUdxfq8sdQQAsBIFBQCwEgUFALASBQUAsBIFBQCwEgUF4NzgLuU765b2/lDq+BwUgHODM0QaeeZ16Lx2hsWo161bp7feeuukxWKl46uRT5w48axWND+TtLQ0/fDDDwoPD5cxRvv379e9996rzp07+2zMM1m1apV27typbt26+W1MCgoAiuGvheUrKSkpuvnmmyVJ+/fvV8eOHRUXFxewmzieyOJP1haUMXz4tDi4+RrgH7feequWLFmixx9//JQrly9ZskSvvfaaKlSooJiYGA0ZMkS7du3SyJEjlZeXp/3796tv375q1arVSauLP/3006cdc+/evQoODpbD4dDOnTs1YsQI5eXl6bzzztMTTzyhiy++WC+88IKWL1+u6tWr6+jRoxo4cKC+/PJLbdy4UUeOHNHYsWP1+eefa9GiRXI4HGrfvr169uypjz76SDNmzFBQUJBq166tJ598Uhs3btTEiRMVFBSkKlWqaPLkyfroo4+UkZGhIUOGaNasWVq8eLGCgoLUrFkzpaSkaOrUqcrMzFR2drZ27NihoUOH6qabbjqr19raguJOz8VDOQH+99eVywcPHqypU6dqwYIFOv/885WSkqI1a9bI4XDo3nvv1XXXXaevv/5aU6dOVatWrU5aXfyvJk2apGnTpmnHjh1q0KCBnnvuOUnSxIkTlZSUpNjYWH3xxReaPHmy7rvvPn322Wd655135Ha7PQvFSsfX3Bs+fLh+/fVXffjhh5o7d64cDod69eqlG2+8UYsWLVKvXr3UoUMHvfvuu3K5XFq+fLlat26t5ORkrVy5UgcPHvTs7+eff9aSJUv01ltvKSgoSP3799d///tfSVJwcLBeeeUVrVmzRrNmzSq7BQUAtvvryuXbtm3Tvn37dP/990s6fhfe7du3KyYmRi+99JLeeecdORwOHTt2zLOPE6uL/9WJU3yffvqpJk+erMjISEnHVyGfPn26XnnlFRlj5HQ6tXXrVv3jH/9QxYoVVbFiRV1xxRV/2/8vv/yiHTt2qFevXpKkAwcOaNu2bRo6dKimT5+uN998U1FRUWrVqpUefPBBTZs2Tffcc49q1qzpWYFdkjIyMtS0aVM5nU5JUrNmzbRly5a/vR5/XuG9pLiKDwBK6K/vB0VEROjiiy/WrFmzlJ6erh49eqhp06Z67rnndMcdd2jSpEm67rrrTloZ/MTq4qcTGxur2267TSNGjJB0fEY0ZMgQpaena9SoUWrTpo0aNmyo7777ToWFhcrPz9ePP/74t/1HRUWpYcOGmj17ttLT0xUXF6dGjRpp3rx56t+/v9544w1J0scff6wPPvhAd911l9LT03XJJZecdAeKqKgobdq0SceOHZMxRuvXr/eUYGm/P8YMCsC5wZ17xivvir2/M9xdes2aNZ4bDErSU089VeTPV69eXb169VJSUpIKCgpUu3ZttWvXTm3bttXYsWM1ffp0XXzxxZ672HqrT58+iouL0yeffKLU1FTP+1m5ubl69NFH1bhxY8XGxqpr166qVq2anE7n31Yvv/TSS9W8eXN1795d+fn5io6O9syO7r33XoWHh6ty5cq65ZZbtG3bNqWlpalSpUpyOp0aPXq01q9fL0lq3Lix2rVrp+7du6uwsFAxMTFq1aqVNm/eXKzn5A2rVzNfuHBhoGMACBBWM/dedna2li5dqrvvvlv5+fnq0KGDXn/9db/fAdcbxfm9MoMCgHNctWrV9P3336tz585yOBzq0qWLleVUXBQUAJzjKlSooPHjxwc6RqnjIgkA1rL0HQiUUHF/nxQUACuFhIQoOzubkiojjDHKzs5WSEjRF6b8Gaf4AFgpIiJCmZmZ2rNnT6CjoJSEhIQoIiLC65+noABYyel0nvZDrCgfOMUHALASBQUAsBIFBQCwkrUrSVx33XWqXbt2oGMAAHysWrVqmjlz5t++b21BAQDKN07xAQCsREEBAKxEQQEArERBAQCsREEBAKxEQQEArBSQgiosLNRjjz2mbt26KSkpSb///vtJj69cuVKdO3dWt27dNH/+fK+2sTGz2+1WSkqKEhMTFR8frxUrVlid94Ts7GzFxsZq69atfssrlTzz9OnT1a1bN8XFxentt9+2Oq/b7dbDDz+shIQEJSYmWvcaS9LRo0eVkJDgyRbIY68keQN53JU08wm2HnvSqTP7/NgzAbBs2TKTmppqjDFm48aN5sEHH/Q8lp+fb1q1amX2799v8vLyTFxcnMnKyipyG1szv/POO2bMmDHGGGP27dtnYmNjrc574rE+ffqYf/7zn+bXX3/1W96SZl67dq154IEHTEFBgXG5XGbKlClW5/3444/NgAEDjDHGrF692vTr189vec+U2RhjNm3aZO666y7TokULz+8/kMdeSfIG8rgraWZj7D32TpfZH8deQGZQGzZs0E033SRJuvLKK/X99997Htu6dasiIyNVtWpVBQcHKyYmRl999VWR29iauW3btho4cKDn5ypWrGh1XkmaOHGiEhISdOGFF/ot69lkXr16tRo1aqS+ffvqwQcf1C233GJ13vr166ugoECFhYVyuVwKCvLvDQXOdBzl5+frhRdeUFRUlNfb2JY3kMedVLLMkr3HnnTqzP449gJyuw2Xy6XQ0FDP1xUrVtSxY8cUFBQkl8ulsLAwz2OVK1eWy+UqchtbM1euXNmz7YABAzRo0CC/ZC1p3oULF6p69eq66aab9PLLL/st69lkzsnJ0Y4dOzRt2jRlZmbq3//+t5YuXSqHw2Fl3kqVKumPP/5Qu3btlJOTo2nTpvk8p7eZJSkmJqbY29iWN5DH3Ylxi5vZ5mNPOnVmfxx7AZlBhYaG6vDhw56vCwsLPS/EXx87fPiwwsLCitzG1syStHPnTvXs2VN33HGHOnXqZHXeBQsW6PPPP1dSUpJ++uknpaam+vVmcSXJHB4erhtvvFHBwcGKiorSeeedp3379lmb97XXXtONN96oZcuW6b333lNaWpry8vL8kvdMmUtzm9JS0rEDddxJJcts87F3Ov449gJSUFdffbVWrVolSfrmm2/UqFEjz2MNGjTQ77//rv379ys/P19fffWVrrrqqiK3sTXz3r171bt3b6WkpCg+Pt76vHPmzNEbb7yh9PR0NWnSRBMnTlSNGjWszhwTE6PPPvtMxhjt3r1bR48eVXh4uLV5q1Sp4vnjpWrVqjp27JgKCgr8kvdMmUtzm9JSkrEDedxJJcts87F3Ov449gJyiq9169Zas2aNEhISZIzRuHHj9MEHH+jIkSPq1q2b0tLSlJycLGOMOnfurJo1a55yG9szjxkzRgcPHtSLL76oF198UZI0Y8YMhYSEWJk30EqSuWbNmlq/fr3i4+NljNFjjz3mt/ccSpK3V69eGjZsmBITE+V2u/XQQw+pUqVKfsnrTWZvt7E577Rp0wJ23JU0c6CVJHPLli19fuyxmjkAwEp8UBcAYCUKCgBgJQoKAGAlCgoAYCUKCgBgJQoKZUJmZqa6du1a5M8888wziouL07p163ya5Y033pAkrVq1SvPmzTurfR04cEDDhg3T3XffrYSEBD300EM6dOhQsfezfPlydezYUbNnz/a8Dq+99pqef/75027Tr1+/Yo+zY8cOrVy5stjbAadU6qv7AQGwfft206VLlyJ/plWrVubQoUM+z9KiRYtS21fv3r3NRx995Pn61VdfNYMGDSr2foYNG2ZWrFhhjPHt67BgwQIzadIkn+wb5U9APqgL+FJSUpIuvfRSbdmyRS6XS88995z+85//aNeuXXrggQc0c+ZMPfvss9qwYYMkqWPHjrrnnnuUlpam/fv3a//+/UpOTtZbb70lp9OpXbt2KSEhQWvXrtXmzZvVs2dPJSYmaunSpZozZ45n3Oeee07z5s3TgQMHNHLkSEVHRysjI0NDhgzRrFmztHjxYgUFBalZs2ZKSUnR1KlTlZmZqezsbO3YsUNDhw71LNgpSX/88Yf27t2r1q1bn/TcOnfuLEl6//339frrrys4OFj16tXT6NGjJUmPP/64fv/9dxUWFmrQoEFyuVz65JNPtGnTJv3444+e1+H+++/Xu+++q2eeeUZvv/223nzzTRUWFuq2225T//79dcMNN2jNmjX6+eefNWbMGEnHl7cZN26cfvzxR82YMUNOp1OZmZlq37697r//fr388svKzc3VVVddpdtuu83nv2uUcYFuSKA0/HkG1aNHD/P+++8bY4x5+umnzfTp040xxrRs2dLk5uaalStXmr59+5rCwkKTn59v4uPjzebNm01qaqp59dVXjTHHbyXQvn17k5+fbzZu3Ghuvvlmk5eXZ7Zt22Zuv/12Y4wxL730kjly5IgxxpgRI0aY9957zxjzfzOoE7OJzZs3m/j4eJOfn28KCwtN3759zcqVK82UKVPM8OHDjTHHb73Ru3fvk57T119/bfr06XPK57tv376TZkJjx4416enpZs6cOebJJ5/0/Ez79u2NMcakpqaaTz/99KTXYe3atWbQoEFm7969pnXr1ubo0aOmoKDAjB071rhcLs/z6NKli9myZYsxxpj58+ebp59+2qxdu9a0a9fOuN1uc/jwYXP11Vef9JyB0sAMCmXSZZddJkm66KKLtHfv3pMe27p1q5o1ayaHwyGn06mmTZt6bsJWv359z89dcsklcjqdCgsLU2RkpIKDg1W1alXP4q4XXHCBUlNTVblyZWVkZOjKK688ZZaMjAw1bdpUTqdTktSsWTNt2bJFktSkSRNPzvz8/JO2q1Wrlnbt2nXS99xut5YuXaq6deuqYcOGnhWor7nmGq1evVoOh0MbNmzQpk2bJEnHjh1TTk5Oka/V9u3bdckll3iWAho2bNjfXq9Ro0Z5xj/xGjVq1EhBQUEKCgry2zJCKF+4SALlToMGDTyn99xutzZu3Ki6detK0km3CijqtgGHDh3SlClT9Mwzz2jMmDE677zzZP7/qmHmL6uHRUVFadOmTTp27JiMMVq/fr3nP/mixqhZs6aqVaum5cuXe743e/ZsLV++XBEREdq6dauOHDkiSfryyy9Vv359RUVFqUOHDkpPT9eMGTPUtm1bVa1atcjXIzIyUhkZGZ6CHDBggHbv3u15vH79+po4caLS09OVkpKi2NjY02avUCoC/jAAAAESSURBVKGCCgsLixwP8BYzKJQ7LVu21Jdffqlu3brJ7Xarbdu2uvzyy4u1j9DQUF199dW66667VKlSJVWpUkVZWVmSjhfgkCFD1KJFC0lS48aN1a5dO3Xv3l2FhYWKiYlRq1attHnz5jOO8+STT2r06NGaNWuW3G63IiMjNWbMGIWFhal///7q2bOnKlSooMjISA0ZMkQOh0PDhw9Xjx495HK5lJiYqAoViv47tHr16rrvvvvUo0cPORwOtWzZ8qTFg0eOHKnU1FTPqutjx471PNe/atSokV566SVdfvnl6tChg1evJXA6LBYLALASp/gAAFaioAAAVqKgAABWoqAAAFaioAAAVqKgAABWoqAAAFb6fyeA6LxYT9bmAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "with sns.axes_style(\"white\"):\n",
    "    ax = (ic.groupby('t').ic.max().to_frame('Random Forest')\n",
    "     .join(lr_metrics.groupby('lookahead').ic.max().to_frame('Linear Regression')).plot.barh())\n",
    "    ax.set_ylabel('Lookahead')\n",
    "    ax.set_xlabel('Information Coefficient')\n",
    "    sns.despine()\n",
    "    plt.tight_layout();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Generate predictions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To build and evaluate a trading strategy, we create predictions for the 2018-19 period using the 10 best models that we then ensemble:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T15:26:19.857933Z",
     "start_time": "2020-06-20T15:26:19.850525Z"
    }
   },
   "outputs": [],
   "source": [
    "param_cols = ['train_length', 'test_length', 'bagging_fraction',\n",
    "              'feature_fraction', 'min_data_in_leaf', 'rounds']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T15:26:20.074859Z",
     "start_time": "2020-06-20T15:26:20.069456Z"
    }
   },
   "outputs": [],
   "source": [
    "def get_params(data, t=5, best=0):\n",
    "    df = data[data.t == t].sort_values('ic', ascending=False).iloc[best]\n",
    "    df = df.loc[param_cols]\n",
    "    rounds = int(df.rounds)\n",
    "    params = pd.to_numeric(df.drop('rounds'))\n",
    "    return params, rounds"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T15:26:20.423293Z",
     "start_time": "2020-06-20T15:26:20.417898Z"
    }
   },
   "outputs": [],
   "source": [
    "base_params = dict(boosting_type='rf',\n",
    "                   objective='regression',\n",
    "                   bagging_freq=1,\n",
    "                   verbose=-1)\n",
    "\n",
    "store = Path(results_path / 'predictions.h5')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-06-20T15:29:17.726690Z",
     "start_time": "2020-06-20T15:26:33.694592Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Lookahead: 01\n",
      "\tPosition: 00\n",
      "\tPosition: 01\n",
      "\tPosition: 02\n",
      "\tPosition: 03\n",
      "\tPosition: 04\n",
      "\tPosition: 05\n",
      "\tPosition: 06\n",
      "\tPosition: 07\n",
      "\tPosition: 08\n",
      "\tPosition: 09\n"
     ]
    }
   ],
   "source": [
    "for lookahead in [1, 5, 10, 21]:\n",
    "    if lookahead > 1: continue\n",
    "    print(f'\\nLookahead: {lookahead:02}')\n",
    "    data = (pd.read_hdf('data.h5', 'stooq/japan/equities'))\n",
    "    labels = sorted(data.filter(like='fwd').columns)\n",
    "    features = data.columns.difference(labels).tolist()\n",
    "    label = f'fwd_ret_{lookahead:02}'\n",
    "    data = data.loc[:, features + [label]].dropna()\n",
    "\n",
    "    categoricals = ['year', 'weekday', 'month']\n",
    "    for feature in categoricals:\n",
    "        data[feature] = pd.factorize(data[feature], sort=True)[0]\n",
    "\n",
    "    lgb_data = lgb.Dataset(data=data[features],\n",
    "                           label=data[label],\n",
    "                           categorical_feature=categoricals,\n",
    "                           free_raw_data=False)\n",
    "    \n",
    "    for position in range(10):\n",
    "        params, num_boost_round = get_params(daily_ic_avg,\n",
    "                                             t=lookahead,\n",
    "                                             best=position)\n",
    "        params = params.to_dict()\n",
    "        params['min_data_in_leaf'] = int(params['min_data_in_leaf'])\n",
    "        train_length = int(params.pop('train_length'))\n",
    "        test_length = int(params.pop('test_length'))\n",
    "        params.update(base_params)\n",
    "\n",
    "        print(f'\\tPosition: {position:02}')\n",
    "\n",
    "        n_splits = int(2 * YEAR / test_length)\n",
    "        cv = MultipleTimeSeriesCV(n_splits=n_splits,\n",
    "                                  test_period_length=test_length,\n",
    "                                  lookahead=lookahead,\n",
    "                                  train_period_length=train_length)\n",
    "\n",
    "        predictions = []\n",
    "        start = time()\n",
    "        for i, (train_idx, test_idx) in enumerate(cv.split(X=data), 1):\n",
    "            lgb_train = lgb_data.subset(train_idx.tolist()).construct()\n",
    "\n",
    "            model = lgb.train(params=params,\n",
    "                              train_set=lgb_train,\n",
    "                              num_boost_round=num_boost_round,\n",
    "                              verbose_eval=False)\n",
    "\n",
    "            test_set = data.iloc[test_idx, :]\n",
    "            y_test = test_set.loc[:, label].to_frame('y_test')\n",
    "            y_pred = model.predict(test_set.loc[:, model.feature_name()])\n",
    "            predictions.append(y_test.assign(prediction=y_pred))\n",
    "\n",
    "        if position == 0:\n",
    "            test_predictions = (pd.concat(predictions)\n",
    "                                .rename(columns={'prediction': position}))\n",
    "        else:\n",
    "            test_predictions[position] = pd.concat(predictions).prediction\n",
    "        \n",
    "\n",
    "    by_day = test_predictions.groupby(level='date')\n",
    "    for position in range(10):\n",
    "        if position == 0:\n",
    "            ic_by_day = by_day.apply(lambda x: spearmanr(x.y_test, x[position])[0]).to_frame()\n",
    "        else:\n",
    "            ic_by_day[position] = by_day.apply(lambda x: spearmanr(x.y_test, x[position])[0])\n",
    "\n",
    "    test_predictions.to_hdf(store, f'test/{lookahead:02}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:ml4t] *",
   "language": "python",
   "name": "conda-env-ml4t-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.7"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": true,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "374.162px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
